T1:閏年問題判斷
問題描述
給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:
1. 年份是4的倍數而不是100的倍數;
2. 年份是400的倍數。
其他的年份都不是閏年。
輸入格式
輸入包含一個整數y,表示當前的年份。
輸出格式
輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。
說明:當試題指定你輸出一個字符串作為結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。
樣例輸入
2013
樣例輸出
no
樣例輸入
2016
樣例輸出
yes
數據規模與約定
1990 <= y <= 2050。
官方提示:使用if循環
個人分析:嗯,完全是刷自信的題目,唯一需要注意的是在一個if判斷語句中,需要將每一個條件用括號括起來,並且與和非之間也應該有大括號
源代碼:
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
if ((((n % 4) == 0) && ((n % 100) != 0)) || ((n % 400) == 0)) {
cout << "yes";
}
else{
cout << "no";
}
return 0;
}
編譯結果: xcode編譯結果正確,通過藍橋杯官網
T2 01字串
問題描述
對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:
00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。
輸入格式
本試題沒有輸入。
輸出格式
輸出32行,按從小到大的順序每行一個長度為5的01串。
樣例輸出
00000
00001
00010
00011
<以下部分省略>
00001
00010
00011
<以下部分省略>
分析,第一眼看到這個題目的時候想到的是二進制,從小到大輸出,如果二進制的話,還需要一個從1到32的循環,每一個十進制轉換成二進制輸出
通過運行。
#include <iostream> using namespace std; int bin(int n, int m) { int i = 0, j; bool arr[100]; while(n > 0) { arr[i] = bool(n % 2); i++; n /= 2; } int pos = m - i; if( pos != 0) { for(int k = 0; k != pos; k ++ ){ cout << 0; } } for(j=i-1;j>=0;j--) cout << arr[j]; return 0; } int main(){ for (int i = 0; i != 32; i++) { bin(i,5); cout <<endl; } return 0;
第二種方法,直接用循環來做。可以發現,從左向右第一位第二位直到第五位只是0和1的變換,所以我們只需要控制一下循環的條件就可以
#include<iostream> using namespace std; int main() { int a, b, c, d, e; for (a = 0; a < 2; ++a) { for (b = 0; b < 2; ++b) { for (c = 0; c < 2; ++c) { for (d = 0; d < 2; ++d) { for (e = 0; e < 2; ++e) { cout << a << b << c << d << e << endl; } } } } } return 0; }
同樣通過運行
T3 字母圖形
問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字符,為你的圖形。
樣例輸入
5 7
樣例輸出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
BABCDEF
CBABCDE
DCBABCD
EDCBABC
數據規模與約定
1 <= n, m <= 26。
分析 網上有種分析,說的是以A為對稱向右拉動,其實我覺得吧,這個規律就在於
字母的序號與兩個坐標的差的絕對值有關。
用兩重循環來枚舉所有的坐標,使用絕對值函數計算出坐標的差,再輸出對應的字符。
這是藍橋杯官方的提示,簡單的說,就是A坐標的i和j絕對值差為0,B為1 等等等
#include<iostream> #include<cmath> using namespace std; int main() { int m, n; int x; cin >> m >> n; for (int i = 0; i != m; i++) { for (int j = 0; j != n; j++) { x = abs(i - j); cout << char(65 + x); } cout << endl; } return 0; }