A題
題目大意:數 acm 出現的次數,語文題
思路: ~~~
經常有人問Q學長,ACM是什么,有什么意義,
每當這個時候,Q學長就會說,大概是一個逼格很高的比賽吧,
ACM國際大學生程式設計競賽(英文全稱:ACM International Collegiate Programming Contest(ACM-ICPC或ICPC)是由國際計算機學會(ACM)主辦的,一項旨在展示大學生創新能力、團隊精神和在壓力下撰寫程式、分析和解決問題能力的年度競賽,經過近30多年的發展,ACM國際大學生程式設計競賽已經發展成為最具影響力的大學生計算機競賽,賽事目前由IBM公司贊助,
-來自百度百科
在一次一次的比賽中,卻發現自己已經逐漸習慣了這種氛圍,ACM這一路走來,其中艱辛也只有自己知道,有過快樂和失望,也有期待和迷茫,從一開始奢望ACM帶給我什么,到最后走的時候卻發現自己更喜歡的是這程序,
我記得當年我做的第一題競賽題,其中就有一句ACM就像是一個游戲,如今看來,似乎也是,在ACMer心里,ACM是一場游戲,沒有愛過的人,不會懂,
如今將此題獻給你們,希望未來的路上你們可以風雨無阻,努力去追尋自己喜歡的事物,所謂夢想,不是一開始的勇不可當,而是永不停息的瘋狂,
本題作為簽到題,無輸入,請輸出題目描述中ACM出現的次數,以換行結束,
ac代碼
#include <stdio.h>
int main(){
printf("12\n");
return 0;
}
B題
題目大意:判斷兩個數是否相等
思路:分支結構 if-else即可,注意兩個感嘆號不一樣
ac代碼:
#include <stdio.h>
#include <stdlib.h>
int main(){
int x,y;
scanf("%d%d",&x,&y);
if(x==y) printf("Tacit!\n");
else printf("No Tacit!\n");
return 0;
}
C題
題目大意:計算 1 到 n 中,含2的數字有多少個
思路:回圈判斷即可
ac代碼
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
scanf("%d",&n);
int res = 0;
for(int i = 1; i <= n; i++){
int j = i;
while(j){
if(j % 10 == 2){
res++;
break;
}
j /= 10;
}
}
printf("%d\n", res);
return 0;
}
D題
題目大意:輸出一個數字的對應的拼音
思路:字串模擬就好(解法很多,可以多研究研究)
字串模擬
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char s[1000];
scanf("%s", s); // 輸入字串
int len = strlen(s); // 計算字串長度
for(int i = 0; i < len; i++){ // 依次輸出
if(s[i] == '-') printf("fu ");
else if(s[i] == '0') printf("ling ");
else if(s[i] == '1') printf("yi ");
else if(s[i] == '2') printf("er ");
else if(s[i] == '3') printf("san ");
else if(s[i] == '4') printf("si ");
else if(s[i] == '5') printf("wu ");
else if(s[i] == '6') printf("liu ");
else if(s[i] == '7') printf("qi ");
else if(s[i] == '8') printf("ba ");
else if(s[i] == '9') printf("jiu ");
}
return 0;
}
E題
題目大意:求 N!的位數
思路:因為 N 比較大,通過求N!的對數來解決
第一點: 102 < 999 = 102.9… < 103
第二點: log10(1) + log10(2) + … + log10(n-1) + log10(n) = lon10( N! )
第三點: 0! = 1
ac代碼
#include<stdio.h>
#include<math.h>
int main(){
int n;
double len=1;
scanf("%d", &n);
for(int i = 1; i <= n; i++){
len += log10(i);
}
printf("%d", (int)len);
return 0;
}
F題
題目大意:判斷兩個人是否在是朋友
思路:并查集裸題
第一點:我們可以認為,是好朋友的幾個人在一個朋友圈里邊,并且默認一個朋友圈有一個老大,剛開始的時候,每個人都在只有自己的朋友圈里,并且自己是這個朋友圈的老大,
第二點:當兩個人成為朋友的時候,我們就可以認為,一個人 a 成為了另一個人 b 的老大,這樣 b 小弟也都成為了 a 的小弟,
第三點:查詢時,如果兩個人有相同的老大,他們就是好朋友,否則就不是,
ac代碼
#include<stdio.h>
#include<math.h>
const int maxn = 1e6 + 5;
int f[maxn]; // 記錄每個人的老大是誰,我們可以認為每個集合里邊都有一個老大
int find(int x){ // 尋找 x 的老大是誰,當 f[x] = x 的時候,他就是這個集合的老大
if(x == f[x]) return x;
else return f[x] = find(f[x]); // 當 f[x] != x 的時候,說明他的老大是 f[x],再去看一下 f[x] 對應的人有沒有老大
} // 這里要注意,如果 f[x] 有老大,說明 f[x] 的老大同樣是 x 的老大
void join(int x, int y){ // 合并 x 和 y
int fx = find(x); // 找 x 的老大
int fy = find(y); // 找 y 的老大
if(fx != fy) f[fx] = fy; // 如果他們的老大不同,就讓 y 的老大成為 x 的老大
}
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) f[i] = i; // 初始化,默認每個人都是自己的老大
int op, a, b;
for(int i = 1; i <= m; i++){
scanf("%d%d%d",&op, &a, &b);
if(op == 1){
join(a, b);
}
else{
if(find(a) == find(b)) printf("Y\n"); //相同的老大就輸出 Y
else printf("N\n");
}
}
return 0;
}
end
第一次組織比賽,出了好多鍋,下一次一定不會了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237147.html
標籤:其他
