【项目2-OJ平台题目中多种输入形式的处理】
看教学视频或“OJ平台题目中不同形式输入的处理”,完成平台中的一组题目,分别对应不同输入的形式的问题。
A: 求N组数的最大公约数
Description
计算一组数的最大公约数
Input
第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行
Output
每组的两个整数(a和b)的最大 公约数,每个结果独占一行
Sample Input
3
98 72
80 36
12 144
Sample Output
2
4
12
解:
int gcd(int x, int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成
{
int r;
while (y > 0)
{
r = x%y;
x = y;
y = r;
}
return x;
}
int _tmain(int argc, _TCHAR* argv[])
{
int grp;
cin >> grp;
int numa, numb;
for (int i = 0; i != grp; ++i)
{
cin >> numa >> numb;
cout << gcd(numa, numb) << endl;
}
return 0;
}
B:分离正整数中的各位数
Description
输出正整数的各位数
Input
若干个用空格隔开的正整数(输入个数不确定,键盘输入时,以CTRL-Z结束)
Output
每个正整数的各位数字,个位数在前,十位数紧随,最高位在最后,每位数后面有一个空格。每个正整数对应的输出占一行。
Sample Input
123 9523 89
Sample Output
3 2 1
3 2 5 9
9 8
解:
int _tmain(int argc, _TCHAR* argv[])
{
int n, a;
while (cin >> n)
{
a = n;
while (a > 0)
{
cout << a % 10 << ' ';
a = a / 10;
}
cout << "\n";
}
return 0;
}
C:刑警的射击成绩
Description
刑警培训结束,进行了射击科检验。教官要对学员射击的成绩进行分析,得出各分数段人数统计。
Input
输入若干个0-10间的整数(最高10环,脱靶为0)表示成绩,人数不确定,输入以一个0-10以外的数作为。
Output
各分数段(A:9环以上,B:7环以上,C:5环以上,D:不足5环)的人数,每项成绩占一行
Sample Input
9 7 3 5 8 5 6 7 9 10 0 6 99
Sample Output
A:3
B:3
C:4
D:2
解:
int _tmain(int argc, _TCHAR* argv[])
{
int scores;
int aCnt=0, bCnt=0, cCnt=0, dCnt=0;
while ((cin >> scores) && (scores>-1) && (scores<11))
{
switch (scores)
{
case 0:
case 1:
case 2:
case 3:
case 4:
++dCnt;
break;
case 5:
case 6:
++cCnt;
break;
case 7:
case 8:
++bCnt;
break;
case 9:
case 10:
++aCnt;
break;
default:
break;
}
}
cout << "A: " << aCnt << '\n' << "B: " << bCnt << '\n' << "C: " << cCnt << '\n' << "D: " << dCnt << endl;
return 0;
}
(6)汉诺塔
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,下面左图给出了移动方法的提示。请编制递归函数输出盘子数为4时(程序调试后,试试15个、20个,直至64个,看看会如何),移动的方案。图为盘子数为3时的输出供参考。
解:
void move(int n, char A, char B, char C)
{
if (n == 1)
{
cout << A << "-->" << C << endl;
return;
}
else
{
move(n - 1, A, C, B);
cout << A << "-->" << C << endl;
move(n - 1, B, A, C);
return;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
move(3, 'A', 'B', 'C');
return 0;
}