折紙編程課
① C++程序:折紙游戲
#include<iostream>
#include<string>
using namespace std;
//兩種演算法,第一種演算法效率高點,第二種演算法生成的程序大小比第一種的小
/*bool compare(int *a,int m,int rsize)
{
int i,j;
for(i=0;i<m/2;i++)
{
for(j=0;j<m/2;j++)
{
if(a[i*m+j]!=a[(i+1)*m-1-j])
return false;
if(a[i*m+j]!=a[(m-i-1)*m+j])
return false;
}
}
for(i=m-1;i>m/2;i--)
{
for(j=m-1;j>m/2;j--)
{
if(a[i*m+j]!=a[(i+1)*m-1-j])
return false;
if(a[i*m+j]!=a[(m-i-1)*m+j])
return false;
}
}
return true;
}*/
bool compare(int *a,int m,int rsize)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
if(a[i*m+j]!=a[(i+1)*m-1-j])
return false;
if(a[i*m+j]!=a[(m-i-1)*m+j])
return false;
}
}
return true;
}
void main()
{
int *a;
int n=0;
int m=0;
string *b;
int i,j;
int rsize=0;
cout<<"請輸入一個整數:";
cin>>n;
b=new string[n];
j=0;
while(j<n)
{
cout<<"請輸入矩陣邊長:";
cin>>m;
rsize=m*m;
a=new int[rsize];
cout<<"請輸入矩陣:"<<endl;
for(i=0;i<rsize;i++)
cin>>a[i];
if(compare(a,m,rsize))
b[j]="Yes";
else
b[j]="No";
delete[] a;
j++;
}
cout<<"輸出:"<<endl;
for(i=0;i<n;i++)
cout<<b[i]<<endl;
delete[] b;
}