1. 程式人生 > >藍橋杯訓練第一次作業

藍橋杯訓練第一次作業

題目來自於http://oj.acmclub.cn/
當然其中包括來自其他各大OJ平臺的題目
直接開始咯

第一次題目比較基礎
然而J題還是沒有自己做出來
那麼就把它拿出來單獨寫吧

1001A

題目描述
輸入兩個數A,B,輸出A+B的值。

輸入
輸入多組資料:每組由兩個整數(a和b)構成,a和b之間用空格隔開,每組資料單獨佔一行。
因為不知道有多少組資料,請想辦法判斷輸入何時結束。

輸出
每組的兩個整數(a和b)求和並輸出,每組的求和結果獨佔一行

樣例輸入
1 2
12 24
400 500

樣例輸出
3
36
900

#include <iostream>
using namespace std;
int
main() { int A,B; while(cin>>A>>B) { cout<<A+B<<endl; } return 0; }

1002B

題目描述
輸入兩個數A,B,輸出A+B的值。

輸入
第一行是資料的組數N,從第二行開始是N組由兩個整數(a和b)構成的資料,a和b之間用空格隔開,每組輸入單獨佔一行

輸出
每組的兩個整數(a和b)求和並輸出,每組的求和結果獨佔一行

樣例輸入
2
1 2
10 20

樣例輸出
3
30

#include <iostream>
using namespace std;
int main() { int N,A,B; cin>>N; for(int i=1;i<=N;i++) { while(cin>>A>>B) { cout<<A+B<<endl; } } return 0; }

1003C

題目描述
輸入兩個數A,B,輸出A+B的值。

輸入
多組資料:每組由兩個整數(a和b)構成,a和b之間用空格隔開,每組輸入單獨佔一行。
當輸入為 0 0 時,輸入結束。0 0這組資料不處理。

輸出
對於每一組測試用例,輸出齊對應的和,每組資料一行。

樣例輸入
1 2
3 4
10 20
0 0

樣例輸出
3
7
30

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    while(cin>>a>>b)
    {
        if(a==0&&b==0)
    {
        exit(0);
    }
    else
    {
        cout<<a+b<<endl;
    }
    }
    return 0;
}

1004D

題目描述
多個數求和。

輸入
輸入包含多個測試用例。每個測試用例包含一個正整數N,隨後是N個整數跟在同一行上。當某個測試用例以0開始,終止輸入,且該用例不處理。

輸出
對於每一組測試用例,輸出齊對應的和,每組資料一行。

樣例輸入
3 1 2 4
1 23
5 1 3 5 7 9
0

樣例輸出
7
23
25

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int N,a[100],sum;
	while(cin>>N)
	{
	    if(N==0)
    {
        exit(0);
    }
    else
    {
        {
            sum=0;
            for(int j=1;j<=N;j++)
            {
                cin>>a[j];
                sum=sum+a[j];
            }
            cout<<sum<<endl;
            }
    }
	}
	return 0;
}

1005E

題目描述
多個數求和。

輸入
第一行為N,下面緊跟N行資料。每行資料:開頭為M,後面緊跟M個數。

輸出
輸出每一行M個整數的和,每個資料一行。

樣例輸入
2
1 1
2 3 4

樣例輸出
1
7

#include<iostream>
using namespace std;
int main()
{
	int N,M,a[100],sum;
	cin>>N;
	for(int i=1;i<=N;i++)
    {
        cin>>M;
        sum=0;
        for(int j=1;j<=M;j++)
        {
            cin>>a[j];
            sum=sum+a[j];
        }
        cout<<sum<<endl;
    }
	return 0;
}

1009F

題目描述
輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。

輸入

輸出

樣例輸入
a 1,

樣例輸出
1
1
1
1

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a=0,b=0,c=0,d=0;
    char ch;
    while((ch=getchar())!='\n')
    {
        if((ch<='z')&&(ch>='a')||(ch<='Z')&&(ch>='A'))
        {
            a++;
        }
        else if(ch==' ')
        {
            b++;
        }
        else if((ch<='9')&&(ch>='0'))
        {
            c++;
        }
        else   d++;
    }
    cout<<a<<endl<<b<<endl<<c<<endl<<d;
    return 0;
}

1011G

題目描述
程式設計,輸入一個10進位制正整數,然後輸出它所對應的八進位制數。

輸入

輸出

樣例輸入
10

樣例輸出
12

#include <stdio.h>
int main()
{
 int num;
 scanf("%d",&num);
 printf("%o",num);
 return 0;
}

1018H

題目描述
谷學長有一個非常簡單的問題給你,給你兩個整數A和B,你的任務是計算A+B。

輸入
輸入的第一行包含一個整數T(T<=20)表示測試例項的個數,然後2*T行,分別表示A和B兩個正整數。注意整數非常大,那意味著你不能用32位整數來處理。你可以確定的是整數的長度不超過1000。

輸出
對於每一個樣例,你應該輸出兩行,第一行是"Case #:",#表示第幾個樣例,第二行是一個等式"A+B=Sum",Sum表示A+B的結果。注意等式中有空格。

樣例輸入
2
1
2
112233445566778899
998877665544332211

樣例輸出
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	char a[1050];
	char b[1050];
	int c[1050];
	int d[1050];
	int e[1050];
	int n,p;
	cin>>n;
	for(p=1;p<=n;p++)
	{
	cin>>a;
	cin>>b;
	int m=0,l=0;
	memset(c,0,sizeof(c));
	memset(d,0,sizeof(d));
	memset(e,0,sizeof(e));
    for(int i=0;i<strlen(a);i++)
    {
        d[i]=a[strlen(a)-1-i]-48;
    }
    for(int i=0;i<strlen(b);i++)
    {
        e[i]=b[strlen(b)-1-i]-48;
    }
        while(l<=strlen(a)||l<=strlen(b))
        {
            c[l]=d[l]+e[l]+m;
            m=c[l]/10;
            c[l]=c[l]%10;

            l++;
        }
        if(m!=0) c[l]=m;
        else
        {
        	l--;
			if(c[l]==0) l=l-1;
		}
		cout<<"Case "<<p<<":"<<endl;
		cout<<a<<" + "<<b<<" = ";
		for(int j=l;j>=0;j--)
		{
		    cout<<c[j];
		}
		cout<<endl;
	}
	return 0;
 }

1019I

題目描述
最近谷學長遇到了麻煩的問題,你能幫幫他嗎?
題目是這樣的:計算SUM(n) = 1 + 2 + 3 + … + 10^n。滿足n<=100 000。

輸入
輸入包含多組資料,每組資料一行,包括一個整數n(n<=100 000)。當n=-1時輸入終止。

輸出
對於每個n輸出相應的和。

樣例輸入
1
2
-1

樣例輸出
55
5050

提示
人家……人家真的不是求和題啦 喵~

#include<iostream>
using namespace std;
int main()
{
	int n;
	while(cin>>n)
	{
		if(n>1)
		{
			for(int i=1;i<=2;i++)
			{
				cout<<"5";
				for(int j=1;j<=(n-1);j++)
				{
					cout<<"0";
				}
			}
		}
		else if(n==0)
		{
			cout<<"1";
		}
		else if(n==1)
		{
			cout<<"55";
		}
		else
		{
			break;
		}
		cout<<endl;
	}
	return 0;
}

1025J

1028K

題目描述
輸入一個正整數,輸出它的所有質數的因子(如180的質數因子為2、2、3、3、5)

輸入

輸出

樣例輸入
180

樣例輸出
2 2 3 3 5

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    long int num;
    cin>>num;
    int n=2;
    while(num!=1)
    {
        if(num%n==0)
        {
            cout<<n<<' ';
            num=num/n;
        }
        else
        {
            n++;
        }
    }
    cout<<endl;
    return 0;
}

1029L

題目描述
已知三位整數x和y滿足x+y=1333,其中x的個位數是y的百位數,y的個位數是x的百位數,它們的十位數一樣。求滿足這樣條件的x和y。

輸入

輸出
419+914=1333

按X從小到大輸出,每個等式一行

樣例輸入

樣例輸出

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int x,y,a,b,c;
    for(b=1;b<=9;b++)
    {
        for(a=3;a<=9;a++)//有題目條件可判斷出3+9是最小的
        {
            for(c=9;c>=3;c--)
            {
                x=(100*a)+(10*b)+c;
                y=(100*c)+(10*b)+a;
                if((x+y)==1333)
                {
                    printf("%d+%d=1333\n",x,y);
                }
            }
        }
    }
    return 0;
}

1030M

題目描述
編寫一個程式,列印輸出半徑為1到10的圓的面積,若面積在40到90之間則予以列印,否則,不予列印。

輸入

輸出
r=? area=??.??

保留兩位小數

樣例輸入

樣例輸出

#include <iostream>
#include <iomanip>
#define PI 3.1415926
using namespace std;
int main()
{
    float S;
    for(int i=1;i<=10;i++)
    {
        S=PI*i*i;
        if((S>=40)&&(S<=90))
        {
            cout<<"r="<<i<<" area="
            <<fixed<<setprecision(2)<<S<<endl;
        }
    }
    return 0;
}

1031N

題目描述用
選擇法對10個整數排序。

輸入

輸出

樣例輸入
9 8 7 6 5 4 3 2 1 0

樣例輸出
0
1
2
3
4
5
6
7
8
9

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        cin>>a[i];
    }
    sort(a,a+10);
    for(int k=0;k<10;k++)
    {
        cout<<a[k]<<endl;
    }
    return 0;
}

1032O

題目描述
輸入20個整數,輸出其中能被陣列中其它元素整除的那些陣列元素。

輸入

輸出

樣例輸入
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

樣例輸出
4
6
8
9
10
12
14
15
16
18
20
21

#include<iostream>
using namespace std;
int main()
{
    int a[20];
    for(int i=0;i<20;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<20;i++)
    {
         for(int j=0;j<20;j++)
         {
             if((a[i]%a[j]==0)&&(i!=j))
             {
                 cout<<a[i]<<endl;
                 break;
             }
         }
    }
    return 0;
}

1040P

題目描述
有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。

輸入
一行陣列,分別為a b c

輸出
a b c其中最大的數

樣例輸入
10 20 30

樣例輸出
30

#include <iostream>
using namespace std;
int main()
{
    int a,b,c,temp;
    cin>>a>>b>>c;
    a>b?temp=a:temp=b;
    temp>c?cout<<temp:cout<<c;
    return 0;
}

1042Q

題目描述
給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E

輸入
一個整數0-100以內

輸出
一個字元,表示成績等級

樣例輸入
90

樣例輸出
A

#include<iostream>
using namespace std;
int main()
{
    int n,k;
    cin>>n;

    if(n>=90)  k=1;
    else if((n>=80)&&(n<=89))  k=2;
    else if((n>=70)&&(n<=79))  k=3;
    else if((n>=60)&&(n<=69))  k=4;
    else   k=5;

    switch(k)
    {
        case 1:cout<<"A"<<endl;break;
        case 2:cout<<"B"<<endl;;break;
        case 3:cout<<"C"<<endl;;break;
        case 4:cout<<"D"<<endl;;break;
        case 5:cout<<"E"<<endl;;break;
    }

    return 0;
}

1047R

題目描述
求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字,本題中,假設a=2。
例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。

輸入
n

輸出
和Sn

樣例輸入
5

樣例輸出
24690

#include <iostream>
using namespace std;
int main()
{
    int n,num=1,sum=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    	if(i==0)
    	{
    		num=2;
    		sum+=num;
		}
		else
		{
			num=num*10+2;
			sum+=num;
		}
	}
	cout<<sum<<endl;
    return 0;
}