练习作业5: 韩信点兵 , 统计方案 , 出现最频的数
前排提示:百度搜题搜的爽,一直搜题一直爽
当然搜题就是交 就等着被放生吧88(狗头
本次题目理论上都应该可以独立完成✅
问题 A: 韩信点兵
序号:1055
题目描述
淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。如果我给你一些条件,你能给我满足条件的最小正整数么?
当然,这道题是简单的。给你的每组数据有三行数字,每行数字的第一个数是除数 d ,第二个数是余数 m,然后请你求出一个最小的正整数 n(n < 1000,000),此n能使这三行数字同时满足 n/d == x……m.
输入
第一行是数据的组数 nCase (n<=5),以下有3nCase行。每三行是一组数据,就是给你的三对数据。
输出
对于每组输入,输出一行,是所求得的最小正整数。
样例输入
2
3 2
5 4
7 6
9 2
7 3
6 5
样例输出
104
101
思路过程:
看到韩信点兵,那当然是多多益善啦。那到底多不多呢,我们来看看。首先理解题目意思,第一个输入是nCase,就是数据的组数,和前几期一样。然后是3nCase行,意思就是说每三个是一组的。我们再来看输入的数据,每组数据第一个是除数d,第二个数是余数m。
输入:
组数nCase
除数d1 余数m1
除数d2 余数m2
除数d3 余数m3
* nCase
读完后理解大概意思就是给出三组数,求出满足的最小数字n,使得n/d == i 余 m,(类似于最小公倍数?)判断条件就是if(n%d==m)
。
先搭出框架,一个while循环,由输入的nCase决定做几次。(OJ提示,可以做一次输出一次,不算错误,不用最后一起输出)
while(nCase--)
{
//循环体
}//这是做多少次的标准形式,因为输入nCase之后每做一次直减,最后做了n次就不做了
然后我们定义除数和余数,由于每组三个,我们可以就定义六个数反复使用,由于是余数,这里用 % 。然后进行循环求解n,在这里我首先用了for循环,因为题目规定n<1000,000,所以我设n从1-1000,000for循环,满足三组条件即break跳出,最后输出n。
for(n=0;n<1000000;n++)
if(n%d1==m1&&n%d2==m2&&n%d3==m3)
break;
我们也可以使用while循环,n从1自增再进行判断,满足条件的第一个n就直接跳出输出。
while(++n)//不标准
{
if(n%d1==m1&&n%d2==m2&&n%d3==m3)
{
printf("%d\n",n);
break;
}
}
这样就完成了
Example Answer:
#include<stdio.h>
int main()
{
int nCase,n,d1,d2,d3,m1,m2,m3;
scanf("%d",&nCase);
while(nCase--)
{
n=0;//n重置为0
scanf("%d %d",&