下面这题用C语言怎么写咯,求各位大神帮忙。刚学C语言不久,求代码
看下面的算式:□□x□□=□□x□□□它表示:两个两位数相乘等于一个两位数乘以一个三位数。如果没有限定条件,这样的例子很多。但目前的限定是:这9个方块,表示1~9的9个数...
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要 展开
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要 展开
展开全部
void PutNum(int *m,int n)
{
int a[9];
for(int t=0;t<9;t++) a[t]=m[t];
int z;
for(int j=n+1;j<9;j++)
{
z=a[n];
a[n]=a[j];
a[j]=z;
if((a[0]*10+a[1])*(a[2]*10+a[3])==(a[4]*10+a[5])*(a[6]*100+a[7]*10+a[8]))
printf("%d*%d==%d*%d\n",(a[0]*10+a[1]),(a[2]*10+a[3]),(a[4]*10+a[5]),(a[6]*100+a[7]*10+a[8]));
PutNum(a,n+1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={1,2,3,4,5,6,7,8,9};
PutNum(a,0);
return 0;
}
用冒泡进行位数替换,再进行对比得出的数值,以上能得出你上面给的值,只是顺序有所改变.
{
int a[9];
for(int t=0;t<9;t++) a[t]=m[t];
int z;
for(int j=n+1;j<9;j++)
{
z=a[n];
a[n]=a[j];
a[j]=z;
if((a[0]*10+a[1])*(a[2]*10+a[3])==(a[4]*10+a[5])*(a[6]*100+a[7]*10+a[8]))
printf("%d*%d==%d*%d\n",(a[0]*10+a[1]),(a[2]*10+a[3]),(a[4]*10+a[5]),(a[6]*100+a[7]*10+a[8]));
PutNum(a,n+1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={1,2,3,4,5,6,7,8,9};
PutNum(a,0);
return 0;
}
用冒泡进行位数替换,再进行对比得出的数值,以上能得出你上面给的值,只是顺序有所改变.
2013-04-14
展开全部
这题目让初学者做啊。。你的老师真是牛逼。。。
#include<stdio.h>
#include<string.h>
bool used[10]={false};
int a[10];
int getv(int s,int len)
{
int ret=0,i;
for(i=s;i<s+len;i++)ret=ret*10+a[i];
return ret;
}
void DFS(int deep,int n)
{
int i,x,b,c,d;
if(deep==n)
{
x=getv(0,2);
b=getv(2,2);
c=getv(4,2);
d=getv(6,3);
if(x>b)return ;
if(x*b==c*d)
{
printf("%d x %d = %d x %d\n",x,b,c,d);
}
return ;
}
for(i=1;i<10;i++)
{
if(used[i])continue;
used[i]=true;
a[deep]=i;
DFS(deep+1,n);
used[i]=false;
}
}
int main()
{
DFS(0,9);
return 0;
}
这题应该是2011全国软件设计大赛的题目
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
//输出符合m*n要求的数字
void outPut(int m,int n)
{
int i,j;
for(i=11;i<100;i++)
{
if(i%10!=0)
for(j=111;j<1000;j++)
{
if(j%10!=0)
if(j/10!=10)
if(i*j==m*n)
printf("%d*%d=%d*%d\n",m,n,i,j);
}
}
}
void main()
{
int m,n;
for(m=11;m<=98;m++)
{
if(m%10!=0)
for(n=m+1;n<=99;n++)
{
if(n%10!=0)
outPut(m,n);
}
}
}
//输出符合m*n要求的数字
void outPut(int m,int n)
{
int i,j;
for(i=11;i<100;i++)
{
if(i%10!=0)
for(j=111;j<1000;j++)
{
if(j%10!=0)
if(j/10!=10)
if(i*j==m*n)
printf("%d*%d=%d*%d\n",m,n,i,j);
}
}
}
void main()
{
int m,n;
for(m=11;m<=98;m++)
{
if(m%10!=0)
for(n=m+1;n<=99;n++)
{
if(n%10!=0)
outPut(m,n);
}
}
}
追问
程序是没有错误了,只是 少了一个条件:该算式中1至9的每个数字出现且只出现一次!所以程序运行的结果不对呢,您能再改进一下吗?谢谢了
追答
不好意思,最后一个条件忘了!
看看是否符合要求
#include
//判断是否为9个不同的数字
void B_N(int m,int n,int i,int j,int a[])
{
a[1]=m%10;
a[2]=m/10;
a[3]=n%10;
a[4]=n/10;
a[5]=i%10;
a[6]=i/10;
a[7]=j%10;
a[8]=j/10%10;
a[9]=j/100;
int k,o,p,q,r,s,t,u,v,w;
o=p=q=r=s=t=u=v=w=0;
for(k=1;k=2)break;
if(a[k]==2) p++;if(p>=2)break;
if(a[k]==3) q++;if(q>=2)break;
if(a[k]==4) r++;if(r>=2)break;
if(a[k]==5) s++;if(s>=2)break;
if(a[k]==6) t++;if(t>=2)break;
if(a[k]==7) u++;if(u>=2)break;
if(a[k]==8) v++;if(v>=2)break;
if(a[k]==9) w++;if(w>=2)break;
}
if(k==10)
printf("m=%d,n=%d,i=%d,j=%d\n",m,n,i,j);
}
//输出符合m*n要求的数字
void outPut(int m,int n,int a[])
{
int i,j,k;
for(i=12;i<=65;i++)
{
if(i%10!=0)
if(i%11!=0)
{
for(j=123;j<=987;j++)
{
if(j%10!=0)
if(j/10%10!=0)
if(i*j==m*n)
{
B_N(m,n,i,j,a);
}
}
}
}
}
void main()
{
int m,n;
int a[10]={0,0,0,0,0,0,0,0,0,0};
for(m=12;m<=76;m++)
{
if(m%10!=0)
if(m%11!=0)
{
for(n=m+1;n<=98;n++)
{
if(n%10!=0)
if(n%11!=0)
outPut(m,n,a);
}
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询