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;
}
Beispiel #8
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;
}
Beispiel #9
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;
			}
		}
	}	
}