贺利坚练习(4)

【项目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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值