C语言的竞赛题,韩信点兵

南风咖啡 2008-12-19 10:22:27
相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人、23人一列余1人、29人一列余11人。

刘邦茫然而不知其数。你呢?
你是一位优秀的程序员,请你帮刘邦解决这一问题。
要求由键盘输入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为互不相等的质数
输出总兵士数,要求输出满足条件的最小的一个,但要满足8种排法的每一种排法至少可排一列。(保证给的数据,有结果且计算的结果不会超过2的63次方)

(注意这个题的难点是控制边界值的溢出,在C语言中只有double类型是64位,而且double类型不能用求余%的。麻烦那位大侠给解一下)下面是我的代码可是有溢出,long类型是32位


#include"stdio.h"
#include"math.h"
main()
{
int a,b,c,d,e,f,g,h,A,B,C,D,E,F,G,H;
long i,sum=0;
scanf("%d %d %d %d %d %d %d %d",&A,&B,&C,&D,&E,&F,&G,&H);
scanf("%d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h);
for(i=2;i<pow(2,63);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)
{

sum=i;
break;
}
}
printf("%ld",sum);
}
...全文
1377 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bfhtian 2008-12-19
  • 打赏
  • 举报
回复
嗯,中国剩余定理
FWing 2008-12-19
  • 打赏
  • 举报
回复
你在网上搜一下“中国剩余定理”
或者《算法导论》也有。
可以直接算的,不用这样枚举。在这里复制一堆公式定理啊没什么意义。

另外,我记得可以用long long类型可以用来计算64位。
lbh2001 2008-12-19
  • 打赏
  • 举报
回复
说点题外话,“在C语言中只有double类型是64位,而且double类型不能用求余%的”
虽然在C语言中不能用%对浮点数求余,但C库里有个函数可以弥补

#include <math.h>
double fmod( double x, double y );
The fmod() function returns the remainder of x/y.

C语言还是很强大的
liyudefly 2008-12-19
  • 打赏
  • 举报
回复
不知道你们讨论什么内容,不过这个题好像人为的妖魔化了,很简单的几句代码就行。
#include<iostream>
using namespace std;
/*相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、
17人一列余2人、19人一列余10人、23人一列余1人、29人一列余11人。刘邦茫然而不知其数。你呢?
你是一位优秀的程序员,请你帮刘邦解决这一问题。要求由键盘输入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为互不相等的质数输出总兵士数,要求输出满足条件的最小的一个,但要满足8种排法的每一种排法至少
可排一列。(保证给的数据,有结果且计算的结果不会超过2的63次方)*/
void main()
{
for(unsigned long int H = 40;H < 4294967260 ;H += 29)
{
if(H % 23 == 1)
{
if(H % 19 == 10)
{
if(H % 17 == 2)
{
if( H % 13 == 6)
{
if( H % 7 == 4)
{
if( H % 5 == 2)
{
if( H % 3 ==1)
{
cout<<"H="<<H<<endl;
}
}
}
}
}
}
}
}
}


计算结果:
H=224399662
H=518476627
H=812553592
H=1106630557
H=1400707522
H=1694784487
H=1988861452
H=2282938417
H=2577015382
H=2871092347
H=3165169312
H=3459246277
H=3753323242
H=4047400207
Press any key to continue
题目要求输出满足条件的最小的一个,没必要64位,如果说要是任意的素数的话,那就64位也是不够的,解出题即可。
M0605050215 2008-12-19
  • 打赏
  • 举报
回复
中国剩余定理!!
呼呼!
枚举,黑我哦,,,
同意一楼的,
有__int 64存储64位
内容概要:本文围绕间歇性光伏出力条件下48V直流母线电压的稳定控制与储能系统双向充放电的闭环调控体系展开深入研究,系统探讨了光伏阵列非线性输出特性与锂离子电池储能系统在离网直流微网中的能量均衡建模方法及分层控制策略。通过Simulink平台构建完整的光伏储能直流系统仿真模型,涵盖PV阵列、Boost DC-DC变换器、负载、双向DC-DC变换器及电池系统等关键组件,实现了最大功率点跟踪(MPPT)与储能系统的协同控制,有效应对光照波动引起的功率供需失衡问题。研究采用双PI闭环控制、模型预测控制(MPC)等多种先进控制算法,显著提升了系统的动态响应速度与直流母线电压稳定性,并实现了储能系统在削峰填谷中的优化运行,对于增强离网微网的供电可靠性与能源利用效率具有重要理论价值和工程意义。; 适合人群:具备电力电子、新能源系统或自动控制等相关领域基础知识的研究生、科研人员,以及从事微电网、光伏储能系统开发与设计的工程技术人员。; 使用场景及目标:① 构建适用于离网场景的光伏储能系统Simulink仿真模型;② 实现间歇性光照条件下48V直流母线电压的精确稳定控制与储能系统的双向能量管理;③ 研究MPPT控制与储能充放电策略之间的协同机制,提升系统在复杂工况下的运行稳定性与鲁棒性;④ 为微电网能量管理系统的设计、优化与性能验证提供可靠的理论依据和技术支撑。; 阅读建议:建议结合文中所述的Simulink仿真模型与控制算法,亲自动手实践建模与仿真全过程,重点关注MPPT控制策略的实现、双向DC-DC变换器的设计以及电压外环与电流内环构成的双闭环控制结构的参数整定,并通过设置不同的光照强度变化曲线和负载投切工况,全面测试和评估系统的动态响应能力与控制性能。

33,315

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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