你能调整其下程序的嵌套问题,使其达到题目要求吗??

wzpk10 2008-10-31 11:43:32
其程序的目的是为了用1、2、3、4、5、6、7、8、9这9个数字,填入X中使等式XX*XXX= XXX 成立,每个数字恰好只用一次。
我个人的主要思想是使用2个数组,一个数组存储这9个数值,另外一个数组用来存储与上个数组相对应的下标值.开始所有下标初值为1,当使用9个数中的一个数后,起下标也会相应由1改变为0,来代表此数值以使用,方便后面取数时对前面数判断是否已使用过.
程序思想基本如上,程序如下:
#include <iostream.h>
void main()
{
int i,j,k,o,p,q,r,s,t,a[100],b[100],n=9,x,y,z;
for(i=1;i<=n;i=i+1)
{
a[i]=i;
b[i]=1;
}
for(i=1;i<=n;i=i+1)
for(j=1;j<=n;j=j+1)
if(a[i]==a[j])
break;
else
{
b[i]=0;b[j]=0;
x=a[i]*10+a[j];
for(k=1;k<=n;k=k+1)
for(o=1;o<=n;o=o+1)
for(p=1;p<=n;p=p+1)
if(b[k]==0 ||b[o]==0||b[p]==0)
break;
else
{
b[k]=0;b[o]=0;b[p]=0;
y=a[k]*100+a[o]*10+a[p];
for(q=1;q<=n;q=q+1)
for(r=1;r<=n;r=r+1)
for(s=1;s<=n;s=s+1)
for(t=1;t<=n;t=t+1)
if(b[q]==0||b[r]==0||b[s]==0||b[t]==0)
break;
else
{
b[q]=0;b[r]=0;b[s]=0;b[t]=0;
z=a[q]*1000+a[r]*100+a[s]*10+a[t];
if(x*y==z)
cout <<x<<"*"<<y<<"="<<z;
else
break;
}
}
}
}
题目中自然有些小问题,希望那位有耐心的高手能解答.
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-31
  • 打赏
  • 举报
回复


应该是 XX * XXX = XXXX 吧??

太乙 2008-10-31
  • 打赏
  • 举报
回复
#include <iostream.h> 
void main()
{
int i,j,k,o,p,q,r,s,t,a[100],b[100],n=9,x,y,z;
for(i=1;i <=n;i=i+1)
{
a[i]=i;
b[i]=1;
}
for(i=1;i <=n;i=i+1)
for(j=1;j <=n;j=j+1)
if(a[i]==a[j])
break;
else
{
b[i]=0;b[j]=0;
x=a[i]*10+a[j];
for(k=1;k <=n;k=k+1)
for(o=1;o <=n;o=o+1)
for(p=1;p <=n;p=p+1)
if(b[k]==0 ||b[o]==0||b[p]==0)
break;
else
{
b[k]=0;b[o]=0;b[p]=0;
y=a[k]*100+a[o]*10+a[p];
for(q=1;q <=n;q=q+1)
for(r=1;r <=n;r=r+1)
for(s=1;s <=n;s=s+1)
for(t=1;t <=n;t=t+1)
if(b[q]==0||b[r]==0||b[s]==0||b[t]==0)
break;
else
{
b[q]=0;b[r]=0;b[s]=0;b[t]=0;
z=a[q]*1000+a[r]*100+a[s]*10+a[t];
if(x*y==z)
cout <<x <<"*" <<y <<"=" <<z;
else
break;
}
}
}
}
hhyttppd 2008-10-31
  • 打赏
  • 举报
回复

void test_it(int cur_pos, int sign[], int value[], int results[])
{
if(cur_pos > 8)
{
int x = results[0] * 10 + results[1];
int y = results[2] * 100 + results[3] * 10 + results[4];
int z = results[5] * 1000 + results[6] * 100 + results[7] * 10 + results[8];
if(x*y==z)
std::cout <<x <<"*" <<y <<"=" <<z << std::endl;
return;
}

for(int i = 0; i < 9; ++i)
{
if(sign[i]==0)
continue;
sign[i] = 0;
results[cur_pos] = value[i];

test_it(cur_pos + 1, sign, value, results);

sign[i] = 1;
}
}

int main()
{
int values[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int signs[9] = {1, 1, 1, 1, 1, 1, 1, 1, 1};
int results[9] = {0};

test_it(0, signs, values, results);

}
hhyttppd 2008-10-31
  • 打赏
  • 举报
回复

#include <iostream>
void main()
{
int i,j,k,o,p,q,r,s,t,a[100],b[100],n=9,x,y,z;
for(i=1;i <=n;i=i+1)
{
a[i]=i;
b[i]=1;
}

for(i=1;i <=n;i=i+1)
{
b[i] = 0;
for(j=1;j <=n;j=j+1)
{
if(b[j]==0)
continue;

b[j]=0;
x=a[i]*10+a[j];
for(k=1;k <=n;k=k+1)
{
if(b[k] == 0) continue;
b[k] = 0;
for(o=1;o <=n;o=o+1)
{
if(b[o] == 0) continue;

b[o] = 0;
for(p=1;p <=n;p=p+1)
{
if(b[p]==0)
continue;

b[p]=0;

y=a[k]*100+a[o]*10+a[p];
for(q=1;q <=n;q=q+1)
{
if(b[q]==0)
continue;
b[q] = 0;
for(r=1;r <=n;r=r+1)
{
if(b[r]==0)
continue;
b[r] = 0;
for(s=1;s <=n;s=s+1)
{
if(b[s]==0)
continue;
b[s] = 0;
for(t=1;t <=n;t=t+1)
{
if(b[t]==0)
continue;
b[t] = 0;
z=a[q]*1000+a[r]*100+a[s]*10+a[t];
if(x*y==z)
std::cout <<x <<"*" <<y <<"=" <<z << std::endl;
b[t] = 1;
}
b[s] = 1;
}
b[r] = 1;
}
b[q] = 1;
}
b[p]=1;
}
b[o] = 1;
}
b[k] = 1;
}
b[j]=1;
}
b[i] = 1;
}
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧