18104 练习使用多case解题(3种多case的情况)(c语言或c++)

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

18104 练习使用多case解题

Description

多CASE的问题在般有3种情形:(1)有一个数字开始表明CASE数目;(2)以特殊标志表示结束;(3)要求处理到最后一行。

现要求你在程序一次运行中,依次处理上述3种情况。

有三批测试数据,第1批测试数据,开头会以一个数字告之该批CASE数量,每一个CASE是两个正整数;
第1批测试数据结束后,紧接着是第2批数据,每一个CASE同样是两个正整数,第2批测试数据以两个0结束;
第2批测试数据结束后,紧接着是第3批数据,每一个CASE也是两个正整数,第3批测试数据一直到数据输入结束;

要求

每一个CASE,输出两数的最小公倍数
第1批测试数据处理完毕时,输出“group 1 done”
第2批测试数据处理完毕时,输出“group 2 done”
第3批测试数据处理完毕时,输出“group 3 done”

输入格式

有三批测试数据,第1批测试数据,开头会以一个数字告之该批CASE数量,每一个CASE是两个正整数(最大2的31次方);
第1批测试数据结束后,紧接着是第2批数据,每一个CASE同样是两个正整数,第2批测试数据以两个0结束;
第2批测试数据结束后,紧接着是第3批数据,每一个CASE也是两个正整数,第3批测试数据一直到数据输入结束;

输出格式

要求,每一个CASE,输出两数的最小公倍数
第1批测试数据处理完毕时,输出“group 1 done”
第2批测试数据处理完毕时,输出“group 2 done”
第3批测试数据处理完毕时,输出“group 3 done”

输入样例

2
6 10
5 12
8 16
12 18
8 4
0 0
4 5
4 6

输出样例

30
60
group 1 done
16
36
8
group 2 done
20
12
group 3 done

源码

#include <iostream>
#include <cstdio>
using namespace std;
long long dfs(long long a,long long b)      //因为题目输入的数最大为2的31次方,故要用long long
{
    long long c,q,p;
    q=a;p=b;
    while(a%b!=0)                           //辗转相除法求最大公约数
    {
        c=a%b;
        a=b;
        b=c;
    }
    return (p*q)/b;                         //原来的两个值相乘除去最大公约数就是最小公倍数
}

int main()
{
    int n,a,b;
    scanf("%d",&n);                         
    while(n--)                              //第一组多case情况,直接n自减即可
    {
        cin>>a>>b;
        cout<<dfs(a,b)<<endl;
    }
    cout<<"group 1 done"<<endl;             
    while(cin>>a>>b&&a&&b)                  //第二种多case情况,需要添加以a、b为判断条件
        cout<<dfs(a,b)<<endl;
    cout<<"group 2 done"<<endl;             
    while(cin>>a>>b)                        //第三种无标志多case,想要结束时在命令窗口ctrl+z即可结束,相当于输入cin>>a>>b=EOF
        cout<<dfs(a,b)<<endl;
    cout<<"group 3 done"<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43692948/article/details/91990379