1296 - 韩信点兵
时间限制 : 1 秒
内存限制 : 128 MB
淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。韩信带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
C语言解答
#include<stdio.h> int max2(a, b) { if (a > b) { return a; } else { return b; } } int max3(a, b, c) { return(max2(a, max2(b, c))); } int main() { int nCase; int i,j; int flag; int mod[3] = { 0 }, line[3] = { 0 }; long number; int round; scanf("%d", &nCase); for (i = 1; i <= nCase; i++) { for (j = 0; j < 3; j++) { scanf("%d %d", line + j, mod + j); } round = max3(*line, *(line + 1), *(line + 2)); for (j = 0; j < 3; j++) { if (*(line + j) == round) { flag = *(mod + j); break; } } for (number = round + flag;; number = number + round) { if (number % line[0] == mod[0] && number % line[1] == mod[1] && number % line[2] == mod[2]) { printf("%ld\n", number); break; } } } }
C++解答
#include<cstdio> int main() { int n,d1,m1,d2,m2,d3,m3; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d %d %d %d %d %d",&d1,&m1,&d2,&m2,&d3,&m3); for(int j=1;j<=1000000;j++) if(j%d1==m1&&j%d2==m2&&j%d3==m3) { printf("%d\n",j); break; } } }