、
# include <stdio.h>
int main()
{
int i1,i2,i3,i4,i5;
int num1,num2;
for(i1=1;i1<=9;i1++)
{
for(i2=0;i2<=9;i2++)
{
for(i3=0;i3<=9;i3++)
{
for(int i4=0;i4<=9;i4++)
{
for(int i5=0;i5<=9;i5++)
{
num1 = i5*1+i4*10+i3*100+i2*1000+i1*10000;
num2 = i5*1+i5*10+i5*100+i5*1000+i5*10000+i5*100000;
if(num1*i1==num2)
{
printf(" %d %d %d %d %d\n",i1,i2,i3,i4,i5);
printf("X %d\n",i1);
printf("—————————\n");
printf(" %d %d %d %d %d %d\n",i5,i5,i5,i5,i5,i5);
}
}
}
}
}
}
printf("\n");
return 0;
}
2,填运算符
# include <stdio.h>
int main()
{
int i[5],j;//i存+-*/(4个有效运算符),循环变量、
int sign;//运算累加时的符号(代表下一个运算符)
int count =0;//累加器,统计符合条件的方案;
int num[6];//保存5个有效数字
int result;//最终结果
float left,right;//保存中间结果
char oper[5]={' ','+','-','*','/'};
printf("请输入5个数:\n");
for(j=1;j<=5;j++)
{
scanf("%d",&num[j]);
}
printf("请输入结果:\n");
scanf("%d",&result);
//循环4种运算符,1表示+,2表示-,3表示*,4表示/ i[1],表示第一个运算符
for(i[1]=1;i[1]<=4;i[1]++)
{
if(i[1]<4 || num[2]!=0)
{
//该运算符不能为/,或者第2个数不能为0.即不能出现 /0的情况
for(i[2]=1;i[2]<=4;i[2]++) //i[2]表示第2个运算符
{
if(i[2]<4 || num[3]!=0)
{
for(i[3]=1;i[3]<=4;i[3]++)//i[3]表示第3个运算符
{
if(i[3]<4 || num[4]!=0)
{
for(i[4]=1;i[4]<=4;i[4]++)//i[4]表示第4个运算符
{
if(i[4]<4 || num[5]!=0)
{
left = 0;//将最左边的第一位数字设置为0
right= num[1];//将第一位有效数字赋值给right
sign = 1;
//计算出left 和 right值
for(j=1;j<=4;j++)
{
switch(oper[i[j]])
{
case '+':
left = left+right*sign;//因为+-的级别低于*/,所以本次运算结束
sign = 1;//下一次运算+号,则为正,若下下次运算符依然为+-,则下次运算+-
right= num[j+1];//运算结束,指针后移
break;
case '-':
left = left+right*sign;//因为+-的级别低于*/,所以本次运算结束
sign = -1;//下一次运算-号,则为负,若下下次运算符依然为+-,则下次运算+-
right= num[j+1];//运算结束,指针后移
break;
case '*':
right = right*num[j+1];//*/的优先级高于+-,所以本次运算*
break;
case '/':
right = right/num[j+1];
break;
}
}
//统计结果
//结果分析:若程序中存在+-号,则最终将运算加减号,若不存在+-号,则将等式左边的两数去和
if(left+right*sign ==result)
{
count++;//统计结果+1
printf("%3d: ",count);
for(j=1;j<=4;j++)
{
//i值根据外循环次数确定,j根据本次循环确定
printf("%d %c",num[j],oper[i[j]]);
}
printf("%d = %d\n",num[5],result);
}
}
}
}
}
}
}
}
}
if(count==0)
{
printf("无结果满足要求!");
}else{
printf("总结果:%3d: \n",count);
}
return 0;
}