永发信息网

请问这个C语言程序错在哪里?

答案:2  悬赏:50  手机版
解决时间 2021-04-12 16:15

1个四位数乘以1个一位数等于另1个四位数,组成这三个数的9个数字分别是1~9里的任意数,且不重复。请按顺序输出这三个数:

输出结果应该是:

173846952

196347852

共两组。

下面这段是我编的程序,哪里错了?怎么改正?

void pm(int n)
{int i,a[9];
if(n==0) return;
else for(i=1;i<=9;i++)
{a[n-1]=i;pm[n-1];}

if((a[0]*1000+a[1]*100+a[2]*10+a[3])*a[4]==(a[5]*1000+a[6]*100+a[7]*10+a[8]))
{for(i=0;i<9;i++) printf("%d",a[i]);printf("\n");}}

main()
{pm(9);}

最佳答案

void pm(int n)
{int i,a[9];
if(n==0) return;
else for(i=1;i<=9;i++)
{a[n-1]=i;pm[n-1];}//pm()是函数,不是数组,把[]改成(),不过改完后你这循环套递归,递归套循环,


//想不出来最后是什么结果,建议好好研究重新写个清晰的代码


if((a[0]*1000+a[1]*100+a[2]*10+a[3])*a[4]==(a[5]*1000+a[6]*100+a[7]*10+a[8]))
{for(i=0;i<9;i++) printf("%d",a[i]);printf("\n");}}



main()
{pm(9);}

全部回答

以下代码输出的结果是正确的:

#include <vector> using namespace std;

#define BITSUM 4

typedef struct Num_struct { int val; bool used; } Num_t;

Num_t num[9]; int x1[4], x2[4], x3; //x1是第一组的4位数,x3是第二个数,x2是结果的4位数 vector<int> v1, v2;//分别存放X1和X2的排列组合结果

int find_unused() { for (int i = 0; i < 9; i++) { if (num[i].used) continue;

return i; }

return -1; }

void check() { int i = 0, j = 0, k = 0, l = 0;

int a = 0;

//第一组4位数排列 v1.clear(); for (i = 0; i < BITSUM; i++) { for (j = 0; j < BITSUM; j++) { if (j == i) continue;

for (k = 0; k < BITSUM; k++) { if (k == j || k == i) continue;

for (l = 0; l < BITSUM; l++) { if (l == i || l == j || l == k) continue;

a = x1[i] * 1000 + x1[j] * 100 + x1[k] * 10 + x1[l]; v1.push_back(a); } } } }

//结果4位数排列 v2.clear(); for (i = 0; i < BITSUM; i++) { for (j = 0; j < BITSUM; j++) { if (j == i) continue;

for (k = 0; k < BITSUM; k++) { if (k == j || k == i) continue;

for (l = 0; l < BITSUM; l++) { if (l == i || l == j || l == k) continue;

a = x2[i] * 1000 + x2[j] * 100 + x2[k] * 10 + x2[l]; v2.push_back(a); } } } }

int v1_size = v1.size(); int v2_size = v2.size();

for (i = 0; i < v1_size; i++) { for (j = 0; j < v1_size; j++) { if (v1[i] * x3 == v2[j])//符合条件、输出结果 { printf("%d * %d = %d\n", v1[i], x3, v2[j]); } } } }

int pm(int start, int layer) { if (layer == BITSUM) { int j = 0, k = 0, n; for ( j = 0; j < 9; j++) { if (num[j].used) continue;

//查找第二个数x3, x3 = num[j].val; num[j].used = true;

//查找第三组的4位数x2, for (k = 0; k < BITSUM; k++) { n = find_unused(); x2[k] = num[n].val; num[n].used = true; } check();//检查是否有符合条件的

num[ x3 - 1].used = false; for (k = 0; k < BITSUM; k++) { num[ x2[k] - 1 ].used = false; } }

return 0; }

int i = start - 1; for (; i >= 0; i--) { if (num[i].used) continue;

//查找第一组的4位数x1, num[i].used = true; x1[layer] = num[i].val;

pm(i, layer+1);//递归查找

num[i].used = false; }

return 0; }

int main(int argc, char* argv[]) { for (int i = 0; i < 9; i++) { num[i].val = i+1; num[i].used = false; }

pm(9, 0);

return 0; }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
嫉妒心很重怎么办?
身份证可以解梦幻号吗?
工程造价毕业设计答辩
单选题当北京市时间为12月22日12时时A.天安门
18级格斗家学散打技能需要什么晶体
小学四年级家长对孩子评价怎么写
老牌原汤牛肉粉这个地址在什么地方,我要处理
请问牙龈经常出血饮食方面要注意些什么?
1+1+1+1+1+1+1+1+1+………………+1+1+1=?
北京海淀区有没有精品店?一般的,别太高档了
课程中对设计教学目标的三个要点是怎样介绍的
单选题杂合高茎黄色圆粒植株(DdYyRr)的雄蕊
分手后还是恋恋不忘的诗句
如何吃海参最补
DNF 上海3区 +10索南 多少钱 ~~~~?
推荐资讯
黑莓9500的优点和缺点
从四方打的到十梅庵要多少钱?
DNF从1级生到51级需要多少时间
如果自己想出书,就写在本子上,写了三个笔记
小狗会握手断然不握是怎么回事
如何防止被蹭网?
怎么样用手机看NBA不费流量!!???
求暮光之城1-4部的百度云资源 第四部破晓上下
战地2单机游戏64人地图和僵尸MOD
喜欢正太的和喜欢型男的哪个多
突然发现自己喜欢上身边的朋友?该怎么办?
学校生日祝福语 5分
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?