藍橋杯練習系統試題集(二)--基礎練習(含C/C++答案)
藍橋杯練習系統試題集(二)–基礎練習(含C/C++答案)
1 基礎練習 閏年判斷
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述 給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:
年份是4的倍數而不是100的倍數;
年份是400的倍數。
其他的年份都不是閏年。
輸入格式 輸入包含一個整數y,表示當前的年份。 輸出格式 輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。
說明:當試題指定你輸出一個字串作為結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。樣例輸入 2013 樣例輸出 no 樣例輸入 2016 樣例輸出 yes 資料規模與約定 1990 <= y <= 2050。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
int main()
{
int n;
cin>>n;
if(n%400==0||(n%4==0&&(n%100)!=0))
printf("yes\n");
else
printf ("no\n");
return 0;
}
2 基礎練習 01字串
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述
對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。
輸入格式 本試題沒有輸入。 輸出格式 輸出32行,按從小到大的順序每行一個長度為5的01串。 樣例輸出 00000 00001 00010
00011 <以下部分省略>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
string valueTrans(int n)
{
string tmp="";
string ans="";
while(n){
int r=n%2;
tmp+= r+'0';
n /= 2;
}
for(int i=tmp.length()-1;i>=0;i--)
ans+=tmp[i];
return ans;
}
int main(){
rep(i,0,31)
{
string s=valueTrans(i);
rep(i,1,5-s.length())
printf("0");
cout<<s<<endl;
}
return 0;
}
3 基礎練習 字母圖形
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。
輸入格式 輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。 輸出格式 輸出n行,每個m個字元,為你的圖形。 樣例輸入 5
7 樣例輸出 ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 資料規模與約定 1 <= n, m <=
26。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
int main()
{
int n,m;
cin>>n>>m;
string s;
rep(i,1,m)
s+='A'+i-1;
cout<<s<<endl;
rep(i,2,n){
string sub=s.substr(0,s.length()-1);
char ch=s[0]+1;
s=ch+sub;
cout<<s<<endl;
}
return 0;
}
4 基礎練習 數列特徵
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述 給出n個數,找出這n個數的最大值,最小值,和。
輸入格式 第一行為整數n,表示數的個數。
第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。
輸出格式 輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。 樣例輸入 5 1 3 -2
4 5 樣例輸出 5
-2 11 資料規模與約定 1 <= n <= 10000。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
int a[10005];
int main()
{
int n,mx=-inf,mi=inf;
ll sum=0;
cin>>n;
rep(i,1,n){
cin>>a[i];
sum+=a[i];
if(mx<a[i])
mx=a[i];
if(mi>a[i])
mi=a[i];
}
printf("%d\n",mx);
printf("%d\n",mi);
printf("%lld\n",sum);
return 0;
}
5 基礎練習 查詢整數
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述
給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。輸入格式 第一行包含一個整數n。
第二行包含n個非負整數,為給定的數列,數列中的每個數都不大於10000。
第三行包含一個整數a,為待查詢的數。
輸出格式 如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。 樣例輸入 6 1 9 4 8 3 9 9
樣例輸出 2 資料規模與約定 1 <= n <= 1000。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
int main()
{
int n,a[1005];
cin>>n;
rep(i,1,n)
cin>>a[i];
int v,index=-1;
cin>>v;
rep(i,1,n)
if(a[i]==v){
index=i;
break;
}
printf("%d\n",index);
return 0;
}
6 基礎練習 楊輝三角形
時間限制:1.0s 記憶體限制:256.0MB 提交此題 錦囊1 錦囊2 問題描述
楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的係數。它的一個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:
1
1 1
1 2 1
1 3 3 1
給出n,輸出它的前n行。
輸入格式 輸入包含一個數n。
輸出格式 輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多餘的空格。 樣例輸入 4
樣例輸出 1 1 1 1 2 1 1 3 3 1 資料規模與約定 1 <= n <= 34。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
bool pd(int n){
int x=n/100;
int y=(n/10)%10;
int z=n%10;
if(n==x*x*x+y*y*y+z*z*z)
return true;
else
return false;
}
int main()
{
rep(i,100,999)
if(pd(i))
printf("%d\n",i);
return 0;
}
7 基礎練習 特殊的數字
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
153是一個非常特殊的數,它等於它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。程式設計求所有滿足這種條件的三位十進位制數。
輸出格式 按從小到大的順序輸出滿足條件的三位十進位制數,每個數佔一行。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<list>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);(i++))
#define inf 0x3f3f3f
#define ll long long
#define pi acos(-1)
bool pd(int n){
int x=n/100;
int y=(n/10)%10;
int z=n%10;
if(n==x*x*x+y*y*y+z*z*z)
return true;
else
return false;
}
int main()
{
rep(i,100,999)
if(pd(i))
printf("%d\n",i);
return 0;
}
8 基礎練習 迴文數
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進位制數。 輸出格式
按從小到大的順序輸出滿足條件的四位十進位制數。
#include<stdio.h>
int main()
{
int i,j;
int a,b;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
printf("%d\n",i*1000+j*100+j*10+i);
return 0;
}
9 基礎練習 特殊迴文數
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。 輸入一個正整數n,
程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 。 輸入格式 輸入一行,包含一個正整數n。 輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數佔一行。 樣例輸入 52 樣例輸出 899998 989989 998899 資料規模和約定
1<=n<=54。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=10000;i<=999999;++i)//全部範圍
{
if(i<=99999)//五位數
{
int temp=i;
int a,b,c,d,e;
a=temp%10;
b=temp/10%10;
d=temp/1000%10;
c=temp/100%10;
e=temp/10000;
if(a==e&&b==d&&a+b+c+d+e==n)
cout<<i<<endl;
}
else//六位數
{
int temp=i;
int a,b,c,d,e,f;
a=temp%10;
b=temp/10%10;
c=temp/100%10;
d=temp/1000%10;
e=temp/10000%10;
f=temp/100000;
if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n)
cout<<i<<endl;
}
}
return 0;
}
10 基礎練習 十進位制轉十六進位制
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
十六進位制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進位制數的0至15。十六進位制的計數方法是滿16進1,所以十進位制數16在十六進位制中是10,而十進位制的17在十六進位制中是11,以此類推,十進位制的30在十六進位制中是1E。
給出一個非負整數,將它表示成十六進位制的形式。 輸入格式 輸入包含一個非負整數a,表示要轉換的數。0<=a<=2147483647
輸出格式 輸出這個整數的16進製表示 樣例輸入 30 樣例輸出 1E
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%X\n",n);
return 0;
}
11 基礎練習 十六進位制轉十進位制
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
從鍵盤輸入一個不超過8位的正的十六進位制數字符串,將它轉換為正的十進位制數後輸出。
注:十六進位制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。 樣例輸入 FFFF 樣例輸出 65535
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
char strHex[8];
int i = 0, len = 0, temp = 0;
__int64 nDec = 0;
gets(strHex);
len = strlen(strHex);
for (i = 0; strHex[i] != '\0'; ++i)
{
switch(strHex[i])
{
case 'A': temp = 10; break;
case 'B': temp = 11; break;
case 'C': temp = 12; break;
case 'D': temp = 13; break;
case 'E': temp = 14; break;
case 'F': temp = 15; break;
default: temp = strHex[i]-'0'; break;
}
nDec += (temp*pow(16,len-1-i));
}
printf("%I64d",nDec);
return 0;
}
12 基礎練習 十六進位制轉八進位制
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
給定n個十六進位制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字串,表示要轉換的十六進位制正整數,每個十六進位制數長度不超過100000。輸出格式 輸出n行,每行為輸入對應的八進位制正整數。
【注意】 輸入的十六進位制數不會有前導0,比如012A。 輸出的八進位制數也不能有前導0。
樣例輸入 2 39 123ABC
樣例輸出 71 4435274
【提示】 先將十六進位制數轉換成某進位制數,再由某進位制數轉換成八進位制。
#include <iostream>
using namespace std;
int main()
{
int n=0; //記錄輸入資料的個數
cin>>n;
string sixTeen[10]; //用來記錄輸入的資料
for(int i=0;i<n;i++)
{
cin>>sixTeen[i];
}
for(int i=0;i<n;i++)
{
string eight;//記錄八進位制資料
string tow; //記錄二進位制資料
char eig;
//轉換為二進位制
for(int j=0;j<sixTeen[i].length();j++)
{
switch(sixTeen[i][j])
{
case '0':tow+="0000";break;
case '1':tow+="0001";break;
case '2':tow+="0010";break;
case '3':tow+="0011";break;
case '4':tow+="0100";break;
case '5':tow+="0101";break;
case '6':tow+="0110";break;
case '7':tow+="0111";break;
case '8':tow+="1000";break;
case '9':tow+="1001";break;
case 'A':tow+="1010";break;
case 'B':tow+="1011";break;
case 'C':tow+="1100";break;
case 'D':tow+="1101";break;
case 'E':tow+="1110";break;
case 'F':tow+="1111";break;
default:break;
}
}
//轉換為八進位制
//首先補齊“0”
int m=tow.length()%3;
if(m==1)
tow.insert(0,"00");
else if(m==2)
tow.insert(0,"0");
//進行轉換
if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0'))
{
eig=(tow[0]-'0')*4+(tow[1]-'0')*2+(tow[2]);
eight=eight+eig;
}
for(int k=3;k<tow.length();k=k+3)
{
//eig=(tow[k*3]-'0')*4+(tow[k*3+1]-'0')*2+(tow[k*3+2]);
//eight=eight+eig;
if(tow.substr(k,3)=="000")
eight+="0";
else if(tow.substr(k,3)=="001")
eight+="1";
else if(tow.substr(k,3)=="010")
eight+="2";
else if(tow.substr(k,3)=="011")
eight+="3";
else if(tow.substr(k,3)=="100")
eight+="4";
else if(tow.substr(k,3)=="101")
eight+="5";
else if(tow.substr(k,3)=="110")
eight+="6";
else if(tow.substr(k,3)=="111")
eight+="7";
}
//輸出最終的八進位制數
cout<<eight<<endl;
}
return 0;
}
13 基礎練習 數列排序
時間限制:1.0s 記憶體限制:512.0MB 提交此題 錦囊1 錦囊2 問題描述
給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200 輸入格式 第一行為一個整數n。
第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。 輸出格式 輸出一行,按從小到大的順序輸出排序後的數列。 樣例輸入
5 8 3 6 4 9 樣例輸出 3 4 6 8 9
#include<iostream>
#include<algorithm>
#define MAX 200+5
using namespace std;
int main()
{
int n;
int i=0;
int a[MAX];
scanf("%d\n",&n);
while(i<n)
{
cin >> a[i++] ;
if ( cin.get() == '\n' ) //遇到回車,結束輸入
{
break;
}
}
sort(a,a+n);
for(int i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}