算法之路3

1. A+B和C 

给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。

输入格式:

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false

代码:

#include <iostream>
using namespace std;

int main()
{
    long int A,B,C;
    int T;
    int X=1;
    cin>>T;
    while(T--)
    {
      cin>>A>>B>>C;
      if(A+B>C)
      cout<<"Case #"<<X++<<": true"<<endl;
      else
      cout<<"Case #"<<X++<<": false"<<endl;
    }
    //system("PAUSE");
    return 0;
}

  

1012. 数字分类 (20)

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

  • A1 = 能被5整除的数字中所有偶数的和;
  • A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;
  • A3 = 被5除后余2的数字的个数;
  • A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
  • A5 = 被5除后余4的数字中最大数字。

    输入格式:

    每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

    输出格式:

    对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

    若其中某一类数字不存在,则在相应位置输出“N”。

    输入样例1:
    13 1 2 3 4 5 6 7 8 9 10 20 16 18
    
    输出样例1:
    30 11 2 9.7 9
    
    输入样例2:
    8 1 2 4 5 6 7 9 16
    
    输出样例2:
    N 11 2 N 9
  • 代码:
    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
        bool flag1=false;
        bool flag2=false;
        bool flag3=false;
        bool flag4=false;
        bool flag5=false;
        int N;
        int factor=1;
        int t=0;
        int A=0;
        int mod=0;
        int A1=0,A2=0,A3=0,A5=0;
        double A4=0;
        int k=0;
        cin>>N;
        while(N--)
        {
            cin>>t;
            A=t/5;
            mod=t%5;
            switch(mod)
            {
            case 0:
                if(A%2==0) {A1+=t;flag1=true;} break;
            case 1:
                A2 += factor*t; factor=-factor;flag2=true;break;
            case 2:
                A3++;flag3=true;break;
            case 3:
                A4+=t;k++;flag4=true;break;
            case 4:
                if(A5<t) A5=t;flag5=true;break;
            }
        }
        if (flag1)
        cout<< A1<<" ";
        else
        cout<<"N"<<" ";
        if (flag2)
            cout<< A2<<" ";
        else
            cout<<"N"<<" ";
        if (flag3)
            cout<< A3<<" ";
        else
            cout<<"N"<<" ";
        if (flag4)
            cout<<fixed<<setprecision(1)<<A4/k<<" ";
        else
            cout<<"N"<<" ";
        if (flag5)
            cout<<A5;
        else
            cout<<"N";
        cout<<endl;
        //system("PAUSE");
        return 0;
    }
    

      

    1017. A除以B (20)

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

    输入格式:

    输入在1行中依次给出A和B,中间以1空格分隔。

    输出格式:

    在1行中依次输出Q和R,中间以1空格分隔。

    输入样例:
    123456789050987654321 7
    
    输出样例:
    17636684150141093474 3
    

     代码:

    #include <iostream>  
    #include <string>  
    using namespace std;  
    int main()  
    {  
        int n,m=0;  
        string str;  
        cin>>str>>n;  
        if(str.length()==1 &&str[0]-'0'<n)  
            cout<<"0 "<<str[0]-'0'<<endl;  
        else  
        {  
            for(int i=0;i<str.length();i++)  
            {  
                if(i>0 && m==0 && str[i]-'0'<n)  
                    cout<<"0";  
                m=m*10+str[i]-'0';  
                 if(m/n>0)  
                 {  
                     cout<<m/n;  
                     m=m%n;  
                 }  
            }  
            cout<<" "<<m<<endl;  
        }  
        return 0;  
    }  
    

      

    1021. 个位数统计 (15)

    给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。

    输入格式:

    每个输入包含1个测试用例,即一个不超过1000位的正整数N。

    输出格式:

    对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。

    输入样例:
    100311
    
    输出样例:
    0:2
    1:3
    3:1
    代码:
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LEN   1024
     int main(void)
    {
        char str[MAX_LEN];
       int table[10] = {0};
       int i, len;       
        scanf("%s", str);
       len = strlen(str);
       for(i = 0; i < len; i++)
         {
            table[str[i]-'0']++;
       }
        for(i = 0; i < sizeof(table)/sizeof(table[0]); i++)
        {
           if(table[i] != 0)
               printf("%d:%d\n", i, table[i]);
       }
        return 0;    
    }
    

      

posted @ 2017-09-03 22:41  双人余555  阅读(317)  评论(0编辑  收藏  举报