主题:[C语言]韩信点兵求教
题目如下
要求由键盘输入A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h十六个数,分别代表每A人一列余a、每B人一列余b、每C人一列余c、每D人一列余D、每E人一列余e、每F人一列余f、每G人一列余g、每H人一列余h,其中A,B,C,D,E,F,G,H为互不相等的质数
Output
输出总兵士数,要求输出满足条件的最小的一个,但要满足8种排法的每一种排法至少可排一列。(保证给的数据,有结果且计算的结果不会超过2的63次方)
Sample Input
2 3 5 7 11 13 17 19
1 1 1 1 1 1 1 1
Sample Output
9699691
我的代码是
#include<stdio.h>
int main()
{
unsigned long int a[8],b[8],i=1,j;
for(j=0;j<8;j++)
{
scanf("%lu",&a[j]);
i*=a[j];
}
for(j=0;j<8;j++)
scanf("%lu",&b[j]);
i++;
while(1)
{
if((i%a[0]==b[0])&&(i%a[1]==b[1])&&(i%a[2]==b[2])&&(i%a[3]==b[3])&&(i%a[4]==b[4])&&(i%a[5]==b[5])&&(i%a[6]==b[6])&&(i%a[7]==b[7]))
break;
i++;
}
printf("%lu\n",i);
return 0;
}
能算出题目给出的结果,提交是错误。。。我已经无解了。
我的思路是先把所有除数相乘得到最小公倍数,然后再以之为起点,一个一个数的判定
要求由键盘输入A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h十六个数,分别代表每A人一列余a、每B人一列余b、每C人一列余c、每D人一列余D、每E人一列余e、每F人一列余f、每G人一列余g、每H人一列余h,其中A,B,C,D,E,F,G,H为互不相等的质数
Output
输出总兵士数,要求输出满足条件的最小的一个,但要满足8种排法的每一种排法至少可排一列。(保证给的数据,有结果且计算的结果不会超过2的63次方)
Sample Input
2 3 5 7 11 13 17 19
1 1 1 1 1 1 1 1
Sample Output
9699691
我的代码是
#include<stdio.h>
int main()
{
unsigned long int a[8],b[8],i=1,j;
for(j=0;j<8;j++)
{
scanf("%lu",&a[j]);
i*=a[j];
}
for(j=0;j<8;j++)
scanf("%lu",&b[j]);
i++;
while(1)
{
if((i%a[0]==b[0])&&(i%a[1]==b[1])&&(i%a[2]==b[2])&&(i%a[3]==b[3])&&(i%a[4]==b[4])&&(i%a[5]==b[5])&&(i%a[6]==b[6])&&(i%a[7]==b[7]))
break;
i++;
}
printf("%lu\n",i);
return 0;
}
能算出题目给出的结果,提交是错误。。。我已经无解了。
我的思路是先把所有除数相乘得到最小公倍数,然后再以之为起点,一个一个数的判定