void shanchu() { printf("当前数据为:\n"); for(j=1;j<=len;j++) printf("%d\t",a[j]); printf("\n"); //输出 printf("请选择需要删除的数字:"); scanf("%d",&x); q=0; for(j=0;j<=len;j++) if(a[j]==x){q=1;} if(q==0)printf("Not find!\n"); //删除数字 else { if(a[len]==x) {a[len]=0; len=len-1; shuchu(); } else{ for(i=0;i<len;i++) if(a[i]==x){t=i-1;t=t+1;} for(s=t;s<=len;s++) a[s]=a[s+1];len=len-1; shuchu(); } printf("请选择菜单功能:"); } }
int main() { printf("请输入原数组:\n"); shuru(); printf("原数组为:\n"); shuchu(a); printf("变化后为:\n"); jiaohuan(a); shuchu(b); return 0; }
void charu() {shuchu(); printf("请输入需要插入的数\n"); scanf("%d",&v); if(v>a[len]){a[len+1]=v;} else{ for(i=0;i<len;i++) if(a[i]<v){n=i;} for(j=len;j>n;j--) //插入 {a[j+1]=a[j];} a[n+1]=v;}len=len+1; shuchu(); }
int main (void) { PXS p; int a; p = gouzao(); shuru(p); a = changdu(p); if(a > 0) { int i; al: printf ("请选择你要的排序方式:\n1.分数从大向小排序\n2.按学号从小到大排序\n输入序号选择:"); scanf ("%d",&i); switch(i) { case 1: Fpaixu(p,a); break; case 2: Xpaixu(p,a); break; default: printf ("输入错误!请重新选择!\n"); goto al; } shuchu(p); } else printf ("学生为零,无需管理!\n"); system ("pause"); return 0; }
//测试主函数 int main() { stu head = NULL; head = creat(); shuchu(head); system("pause"); return 0; }
void shuru() { printf("请输入一组数组,并以'#'结束\n"); for(i=0;i<len+1;i++) //动态输入 { scanf("%d",&a[i]); b=getchar(); if(b=='#'){break;} len=len+1; } printf("共输入%d个数\n",len); for(j=0;j<len;j++) for(i=0;i<len;i++) { if(a[i+1]<a[i]) { t=a[i];a[i]=a[i+1];a[i+1]=t;}} shuchu(); }
int main() { sb(); printf("请选择菜单功能:"); scanf("%d",&u); q=u; //主函数 while(q!=6) { if(q==1){shuru();} if(q==2){shuchu();} if(q==3){shanchu();} if(q==4){charu();} if(q==5){qingkong();} scanf("%d",&q); system("cls"); sb(); } printf("感谢使用!\n"); return 0; }
int main() { printf("欢迎进入数独求解程序!\n"); char dbug; /*是否退出程序的循环*/ do{ /*定义数独,第二三维表示数独的行和列,第一维0表示原数独,1~9表示数字“1”~“9”在原数独中的可填情况。*/ char a[10][10][10]; /*输入*/ shuru(a); M=0; T=clock(); K=K1=0; int t=clock(); /*调试数据*/ // TSshuju2(a); /*测试用的输出模块*/ // shuchu(a,0); printf("\n数独解的情况如下:\n"); /*检验数独的合法性*/ if(hefa(a)) { /*先进行基本运算*/ JByunsuan(a); // shuchu(a,0); /*对于基本运算不能解决的数独,再用枚举法*/ if(!zhengjie(a)) if(!ZJ2(a)) /*枚举*/ meiju(a); else printf("\n该数独有0个解。\n"); else { M++; printf("\n第%d个解:\n",M); shuchu(a,0); } /*枚举后输出解的个数*/ printf("\n该数独共有%d解。\n",M); } else printf("\n该数独有0个解。\n"); printf("\n共用时%dms\n",clock()-t); printf("\n运算结束,退出请按q,按c继续:"); while((dbug=getch())!='q'&&dbug!='c'); }while(dbug!='q'); return 0; }
int meiju(char a[10][10][10]) { if(((clock()-T)>=10000)&&(M==0)&&(K1==0)) { printf("\n运算时间已经超过了10s,请检查输入的数据是否有误。\n"); printf("有误,重来请按y\n无误,我想继续请按n: "); /*fflush()不能用,为什么????bug*/ // system("pause"); char cbug; while((cbug=getch())!='y'&&cbug!='n'); if(cbug=='y') { K=1; K1=1; printf("\n"); return 0; } // system("pause"); K1=1; printf("\n"); } /*枚举函数,当基本运算不能全部填完所有数时,用枚举方法找出所有正确解。*/ int i,j,k=0; char z; /*从1~9循环,实际上并没有循环,只是找出满足条件的最近的一个z*/ for(z='1';z<='9';z++) { k++; /*行循环,实际上并没有循环,只是找出满足条件的最近的一行*/ for(i=1;i<=9;i++) { /*定义b,将该行的可填性的列序号放在b中,可填性最大为9,故a[10]=0来控制循环结束*/ int b[11]={0}; int p; /*扫描该行,将该行的z可填性记录在b中*/ for(j=1;j<=9;j++) /*该格为0说明可填*/ if(a[k][i][j]=='0') /*扫描b[],将列序号填在b中不为零的地方*/ for(p=1;p<=9;p++) if(b[p]==0) { b[p]=j; /*跳出老忘记*/ break; } /*检验该行是否有可填的空,若有,由于经过了基本运算,至少有两个,即b[1]=0或b[1]=b[2]=1*/ if(b[1]!=0) { /*从该行的可填的数的第一个开始循环*/ for(p=1;p<=10;p++) { /*如果未循环完即b[p]仍然表示可填的空*/ if(b[p]!=0) { /*定义一个数独*/ char c[10][10]; int x1,x2; /*将枚举前的数独先存起来,在以后枚举失败时还原*/ for(x1=1;x1<=9;x1++) for(x2=1;x2<=9;x2++) c[x1][x2]=a[0][x1][x2]; /*将改个可填的空枚举为z*/ a[0][i][b[p]]=z; // for(int iK=1;iK<=10;iK++) // if(b[iK]!=0) // printf("b[%d]=%d ",iK,b[iK]); // printf("\n"); // printf("**********%d行%d列:%d\n",i,b[p],k); // shuchu(a,0); // system("pause"); /*再次基本运算*/ JByunsuan(a); /*基本运算后判断原数独是否全部完成*/ if(zhengjie(a)) { // printf("right\n"); /*正解得数量加1*/ M++; printf("\n第%d个解:\n",M); /*如果原数独全部完成,输出*/ shuchu(a,0); // printf("\n按任意键继续进行求解运算\n"); // system("pause"); /*求得一正解后,将原数独还原,继续下一个可填性循环*/ for(x1=1;x1<=9;x1++) for(x2=1;x2<=9;x2++) a[0][x1][x2]=c[x1][x2]; } else /*如果数独的空未填完而所有的1~9数都不可填,说明该枚举错误*/ if(ZJ2(a)) { // printf("error\n"); /*重新还原原数独,继续循环*/ for(x1=1;x1<=9;x1++) for(x2=1;x2<=9;x2++) a[0][x1][x2]=c[x1][x2]; // shuchu(a,0); } /*如果数独的空未填完而还有数可以填,则递归之...*/ /*这个递归花了好长时间才写出来,总是错*/ else { // printf("下一层\n"); meiju(a); if(K==1) return 0; /*枚举返回后,原数独还原,继续p循环*/ for(x1=1;x1<=9;x1++) for(x2=1;x2<=9;x2++) a[0][x1][x2]=c[x1][x2]; } } /*如果b[p]=0,说明该数该行可填的可能已经全部循环完*/ /*而如果该行有该数可填的空格,则该数必在该行的这几个空格中*/ /*如果循环完,说明所有的可能性已经全部循环完了,故返回*/ else { // printf("返回上一层\n"); return 0; } } // return 0; } } } }