如题!
希望大家给我一个思路
最好是用c#来帮我解答这道问题!
希望大家给我一个思路
最好是用c#来帮我解答这道问题!
解决方案 »
- 【求指导啊】TCP服务端获取客户端IP地址
- 这是个抽象类与接口的例子,请告知接口的好处
- 求库管分类明细账明细账的设计
- 运行时绑定列编辑框 XtraGrid DevExpress
- 在XML文件中如何做類似SQL中的SUM()方法
- 大家来讨论下这个数据库语句怎么写有关于DataTime类型数据的
- 菜鸟提问:tlTcpListen的问题;
- 请教下,关于C# 访问LDAP读取BINARY类型数据的问题
- 这行代码有什么问题
- 那位大哥有Janus Systems Controls For .Net的帮助文档?
- 在C#里调用vc写的动态连接库 下面几个函数 怎么在c#里声明调用 高分求助!!!
- 韩文和中文互相转换怎么做啊?
#define N 11/*设定可填入的整数个数*/
int pos;/*标示方格的序号*/
int a[9];/*用于存储方格所填入的整数*/
int b[N];/*用于存储整数是否填入方格的标志,若填入则该标志为0*/
int checkmatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,-1},{4,6,-1},{5,7,-1}};
/*存储需要需要检查合理性的相邻方格的序号,-1拦截以结束检查*/
void write(int a[])/*打印一组解*/
{ int i,j;
printf("------------------\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%3d",a[3*i+j]);
}
printf("\n");
}
printf("------------------\n");
}
int isprime(int m)/*判断一个数是否是素数*/
{
int i;
int primes[]={2,3,5,7,11,17,19,23,29,-1};
if(m==1||m%2==0) return 0; /*若为1或偶数则排除*/
for(i=0;primes[i]>0;i++)
if(m==primes[i]) return 1; /*若为列表中素数则确认*/
for(i=3;i*i<=m;i+=2)if(m%i==0)return 0; /*寻找m的因数,若有因数则排除*/
return 1;
}
int selectnum(int start)/*从小到大查找还未填入方格中的整数,若无返回0*/
{
int j;
for(j=start;j<N;j++)if(b[j])return j;
return 0;
}
int check(int pos)/*检查填入POS位置的整数是否合理*/
{int i,j;
for(i=0;(j=checkmatrix[pos][i])>=0;i++)/*查找检验合理性数组中对应行存放的相邻方格的序号*/
if(!isprime(a[pos]+a[j]))return 0;/*检验相邻方格的序号是否为素数*/
return 1;
}
int extend(int pos)/*为下一个方格找一个尚未使用过的整数*/
{a[++pos]=selectnum(1);
b[a[pos]]=0;/*置标志位为0,该数已填入*/
return pos;
}
int change(int pos)/*调整当前方格填入的整数,使其合理,若找不到则回溯*/
{
int j;
while(pos>=0 && (j=selectnum(a[pos]+1))==0)b[a[pos--]]=1;/*若找不到则后退到前一方格,并清除当前方格整数的填入标志*/
if(pos<0)return -1;/*若第一个方格也找不到则返回-1,表明已回溯完毕*/
b[a[pos]]=1;/*恢复已填入但不合理的整数*/
a[pos]=j;/*填入下一个试探的数*/
b[j]=0;/*置该试探数的填入标志为0,表明填入*/
return pos;/*返回当前方格的序号*/
}
void find()/*寻找解主程序*/
{
int ok=1;
pos=0;a[pos]=1;b[a[pos]]=0;/*初始化*/
do{
if(ok)
if(pos==8)/*表明已找到一组解*/
{write(a);/*打印这组解*/
pos=change(pos);/*回溯,寻找另一组解*/
}
else pos=extend(pos);/*填下一个方格*/
else pos=change(pos);/*调整当前所填整数*/
ok=check(pos);/*判断当前方格所填数是否合理,合理则OK为1*/
}while(pos>=0);/*回溯完毕则循环结束,程序亦结束*/
}
main()
{
int i;
for(i=1;i<N;i++)
b[i]=1;/*所有整数的填入标志初始化*/
find();
}