韩信点兵c语言(关于大一的C语言问题,韩信点兵
发布时间: 2023-07-11

本文目录

关于大一的C语言问题,韩信点兵

int x=1;
while ( x%5!=1 || x%6!=5 || x%7!=4 || x%11!=10 ) x++;
printf(“%d“,x);

C语言韩信点兵(容易超时)

递归的思想,1个队列的话,3余1,明显就是3x+1,最小x=1;和为4
两个队列,5余2,,首先他要满足4+3x的形式,才能满足1,找最小的x使3x+4%5=2;5次以内必找到,和为7;
三个队列7+(3*5)x%7=4;7次必找到;可以得出最多只要计算A+B+C+D+E+F+G+H次的乘法和除法,不可能超1000MS。

c语言编程序:韩信点兵,韩信有一队伍,你想知道有多少人,就让士兵报数,按从1至5报数,最末一个士兵报的

韩信点兵不是按3人一排,5人一排,7人一排吗?如果是这样的话
# include《stdio.h》
int main()
{
int n,a,b,c;
scanf(“%d%d%d“,&a,&b,&c);
for(n=10;n《=200;n++)
{
if (n%3==a && n%5==b && n%7==c)
{
if(n《=100)
{
printf(“%d“,n);
break;
}
else
{
printf(“No answer“);
}
}
}
}

韩信点兵(c语言)

你完全没有按照题目要求做。

#include 《stdio.h》
void main(){
long long i,A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h;
scanf(“%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld“,&A,&B,&C,&D,&E,&F,&G,&H,&a,&b,&c,&d,&e,&f,&g,&h);
for(i=A;;i++)
if(i%A==a&&i%B==b&&i%C==c&&i%D==d&&i%E==e&&i%F==f&&i%G==g&&i%H==h)
{printf(“%lld“,i);break;}
}

运行示例:

关于韩信点兵的一道C语言的题

首先这一部分就有问题
for(i=0;i《8;i++)
{
y=1;
for(j=i-1;j》=0;j--)
y=y*a;
//y=a个数都是0了
Y的定义应在循环体之外,要不然就成了最后一个值给Y。

C语言 韩信点兵

for(i=5;;i+=5)
{if((i+1)%6==5&&(i+1)%7==4&&(i+1)%11==10)
{printf(“韩信有%d个兵“,i+1));break;}
}

请问韩信点兵用c语言怎么编写啊

用枚举法即可,在最大带兵范围内循环计算,直至找到合适的数。

题主的具体题目是什么?我这里先按最核心的内容编写代码吧。

题目:韩信带兵1500人,战死大约400-500,剩余兵力,3人一排多2人,5人一排多4人,7人一排多6人,求韩信剩余多少兵力。

#include 《stdio.h》
int main (void) {
int n; 
for (n=1000; n《1100; n++) /*战死大约400-500,循环范围即在1000-1100之间*/
if((n%3==2)&&(n%5==4)&&(n%7==6)) /*循环找寻某数符合除3余2且除5余4且除7余6*/
printf(“韩信剩余兵力为%d人!“,n);
getch ();
return 0;
}

运行结果

C语言韩信点兵

因为循环里面,设定了 i《=100,
即执行完循环,i 肯定是101,
所以,if(i》100) printf(“No answer\n“);
是可以执行的。
其实你可以单步调试一下就知道了。

C语言中韩信点兵问题的关键

关键是对中国剩余定理的理解

三数为a b c,余数分别为 m1 m2 m3,%为求余计算,&&是“且”运算
⒈分别找出能被两个数整除,而满足被第三个整除余一的最小的数。
k1%b==k1%c==0 && k1%a==1;
k2%a==k2%c==0 && k2%b==1;
k3%a==k3%b==0 && k3%c==1;
⒉将三个未知数乘对应数字的余数再加起来,减去这三个数的最小公倍数的整数倍即得结果。
Answer = k1×m1 + k2×m2 + k3×m3 - P×(a×b×c);
P为满足Answer 》 0的最大整数;
或者 Answer = (k1×m1 + k2×m2 + k3×m3)%(a×b×c)



扫码加微信详细咨询太和智慧养老产品和平台服务!

微信