这个C语言程序设计题不会做,求大神指导。请把代码写清楚,尽量简洁。谢谢!题目如下:
(1)从键盘上读入一个4位正整数a(个十百千位上的数各不相同),作为基准数。(假设该数我们不知道是多少,我们希望通过计算机做出一系列的判断,来确定该数。)(2)再从键盘读...
(1) 从键盘上读入一个4位正整数a(个十百千位上的数各不相同),作为基准数。(假设该数我们不知道是多少,我们希望通过计算机做出一系列的判断,来确定该数。)
(2) 再从键盘读入一个4位正数作为对比数b,用子函数判断对比数b与基准数a之间的差异。如果b中包含有M个a中的数,而且这些数的位还是相同的,则记为MA;如果b中包含有N个(N<=4,整数)A中的数字,且这些数的位不同,则输出NB;
如:a=3295, b=6279,则N=1,M=1,计算机输出提示:1A1B。
(3) 以对比数b做参照,计算机按照提示的MANB,输出所有可能的4位数的情况,记为序列k。(显然,基准数是被包含其中的。)
(4) 再从键盘上读入一个4位数c作为新的对比数,(该数输入序列内的成员之一),重复步骤(2)和(3)。
(5) 直到最后输出的4位数只有基准数。最后,统计为了找到这个基准数,用了多少个对比数。 展开
(2) 再从键盘读入一个4位正数作为对比数b,用子函数判断对比数b与基准数a之间的差异。如果b中包含有M个a中的数,而且这些数的位还是相同的,则记为MA;如果b中包含有N个(N<=4,整数)A中的数字,且这些数的位不同,则输出NB;
如:a=3295, b=6279,则N=1,M=1,计算机输出提示:1A1B。
(3) 以对比数b做参照,计算机按照提示的MANB,输出所有可能的4位数的情况,记为序列k。(显然,基准数是被包含其中的。)
(4) 再从键盘上读入一个4位数c作为新的对比数,(该数输入序列内的成员之一),重复步骤(2)和(3)。
(5) 直到最后输出的4位数只有基准数。最后,统计为了找到这个基准数,用了多少个对比数。 展开
1个回答
展开全部
#include<stdio.h>
#include<string.h>
char *cmp(int aver, int bver)
{
int a[4], b[4];
int i, j, A = 0, B = 0;
char str[5];
a[0] = aver % 10; //拆分成四位
a[1] = aver / 10 % 10;
a[2] = aver / 100 % 10;
a[3] = aver / 1000;
b[0] = bver % 10;
b[1] = bver / 10 % 10;
b[2] = bver / 100 % 10;
b[3] = bver / 1000;
for(i = 0; i < 4; i ++)
for(j = 0; j < 4; j++)
{
if(a[i] == b[j])
if(i == j)
A ++;
else
B ++;
}
sprintf(str, "%dA%dB\0", A, B); //合成字符串返回
return str;
}
void main()
{
int a, b, i;
char str[5], str1[5];
char *s = str, *s1 = str1;
char *str2 = "4A0B"; //要找到基准数,即当打印结果为 4A0B 结束
int sum = 0; //统计使用对比数个数
printf("Please input number a: ");
scanf("%d", &a);
while(1)
{
printf("Please input number b: ");
scanf("%d", &b);
sum ++;
memcpy(s, cmp(a, b), 5);
printf("%s\n", s);
printf("%s\n", s);
if(memcmp(str2, s, 5) == 0) //match成功则跳出循环,结束程序
break;
printf("The sequence K : ")
for(i = 1000; i < 10000; i++)
{
memcpy(s1, cmp(b, i), 5);
if(memcmp(s, s1, 5) == 0)
{
printf("%d\n", i); //将序列k输出,如果不想页面跳得太快,可以使用printf("%d ", i);
}
}
}
printf("Total match time: %d\n", sum);
}
#include<string.h>
char *cmp(int aver, int bver)
{
int a[4], b[4];
int i, j, A = 0, B = 0;
char str[5];
a[0] = aver % 10; //拆分成四位
a[1] = aver / 10 % 10;
a[2] = aver / 100 % 10;
a[3] = aver / 1000;
b[0] = bver % 10;
b[1] = bver / 10 % 10;
b[2] = bver / 100 % 10;
b[3] = bver / 1000;
for(i = 0; i < 4; i ++)
for(j = 0; j < 4; j++)
{
if(a[i] == b[j])
if(i == j)
A ++;
else
B ++;
}
sprintf(str, "%dA%dB\0", A, B); //合成字符串返回
return str;
}
void main()
{
int a, b, i;
char str[5], str1[5];
char *s = str, *s1 = str1;
char *str2 = "4A0B"; //要找到基准数,即当打印结果为 4A0B 结束
int sum = 0; //统计使用对比数个数
printf("Please input number a: ");
scanf("%d", &a);
while(1)
{
printf("Please input number b: ");
scanf("%d", &b);
sum ++;
memcpy(s, cmp(a, b), 5);
printf("%s\n", s);
printf("%s\n", s);
if(memcmp(str2, s, 5) == 0) //match成功则跳出循环,结束程序
break;
printf("The sequence K : ")
for(i = 1000; i < 10000; i++)
{
memcpy(s1, cmp(b, i), 5);
if(memcmp(s, s1, 5) == 0)
{
printf("%d\n", i); //将序列k输出,如果不想页面跳得太快,可以使用printf("%d ", i);
}
}
}
printf("Total match time: %d\n", sum);
}
追问
程序貌似运行不了啊。怎么回事?说有错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询