牛客刷题记录之语法入门选择结构篇
(一)N-送分題
題目描述
數據結構之神ccz又在出毒瘤數據結構了,神出了這樣一個題:
給你三個數,在這三個數中間任意加*或者是+,然后可以隨便打括號,只要這個表達式合法
比如說1 2 3可以得到:
- 1+2*3=7
- 1*(2+3)=5
- 1*2*3=6
- (1+2)*3=9
不能改變這三個數的原順序
最大化表達式的值
輸入描述:
輸入三行,每行一個數分別表示a,b,c輸出描述:
輸出一行一個數表示答案輸入示例:
1 2 3輸出示例:
9輸入示例:
2 10 3輸出示例:
60思路:分成三種情況。
第一種:三個數沒有1,兩兩相乘最大;
第二種:只有一個1,則比較(1+其中一個數)*剩下的那個數,取兩種情況下最大的;
第三種:第一個數和最后一個數都為1,三個數相加的情況最大。
代碼:
#include<stdio.h> int max(int a,int b){int c=a;if (b>a){c=b;}return c; } int main(){int a,b,c,sum;scanf("%d\n%d\n%d",&a,&b,&c);if (a==1&&c==1){sum=a+b+c;}else if(a==1||b==1||c==1){sum=max((a+b)*c,a*(b+c));}else{sum=a*b*c;}printf("%d",sum);return 0; }(二)U-可編程拖拉機比賽
題目描述
“這個比賽,歸根結底就是控制一個虛擬的小拖拉機跑完整個賽道。一般一場比賽會有 9 個到 13 個賽道,最后看能跑完多少個賽道。”
通常在一場可編程拖拉機比賽中,分別會有實際參賽隊伍數 10%、20%、30% 向下取整的隊伍獲得金、銀、銅牌,其余隊伍獲得榮譽提名,俗稱“鐵牌”。
但是主辦方往往會多準備一些獎牌,那么在發獎牌的時候會按照比例向上取整發出的獎牌以減少浪費,就會有一些原本獲得銀牌的隊伍獲得了金牌。
現在給出一個賽區的規模,也就是這個賽區的實際參賽隊伍數,小 Q 同學想知道有多少隊伍的獎牌會由銀變金、由銅變銀、由鐵變銅。
?
輸入描述:
輸入只有一行,包含一個整數 n (10 <= n <= 1000),表示實際參賽隊伍數。輸出描述:
輸出一行,包含三個由空格分隔的整數,分別表示獎牌會由銀變金、由銅變銀、由鐵變銅的隊伍數。輸入實例:
115輸出實例:
1 1 2代碼:
#include<stdio.h> #include<math.h>//向上取整的自定義函數 int Xiang(int a,int b){int c=a%b;if ( c==0 )c=a/b;elsec=a/b+1;return c; }int main(){int n;scanf("%d",&n);//選定的金牌銀牌銅牌數int gold,silver,bronze;gold=n/10;silver=n*2/10;bronze=n*3/10;//主辦方頒發的獎牌數int Gold,Silver,Bronze;Gold=Xiang(n,10);Silver=Xiang(n,5);Bronze=Xiang(3*n,10);//升級獎牌數量統計int ytg=Gold-gold; //銀牌變金牌int tty=Silver-silver+ytg; //銅牌變銀牌;int ttt=Bronze-bronze+tty; //鐵牌變銅牌;printf("%d %d %d",ytg,tty,ttt);return 0; }(三)R-L1-2單位換算
題目描述
已知1英尺=12英寸,1英寸=2.54厘米,1厘米=10毫米。
現在給你一個英尺數,請你換算成毫米。
輸入描述:
第一行給定一個正整數 N ( 0 ≤ N ≤ 100 ),單位是英尺。輸出描述:
在一行中輸出一個數,代表換算后的結果,單位為毫米。
若結果不為整數,只保留一位小數,末尾不要有多余的零。
輸入示例:
5輸出示例:
1524代碼:
#include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);double m=n*12*25.4; //注意m的類型不為整型int c=round(m); //四舍五入if (c==m) //若四舍五入后的整數等于m,說明為整數printf("%d",c);else //若不等于,說明不為整數,需要保留一位小數printf("%.1f",m);return 0; }(四)K-統計數據正負個數
題目描述:
輸入10個整數,分別統計輸出正數、負數的個數。
輸入描述:
輸入10個整數(范圍-231~231-1),用空格分隔。輸出描述:
兩行,第一行正數個數,第二行負數個數,具體格式見樣例。輸入示例:
-1 2 3 -6 7 8 -1 6 8 10輸出示例:
positive:7 negative:3思路:最開始定義一個數組的時候忘記了給定大小,導致溢出。
?最終代碼:
#include<stdio.h> int main(){int a[10]={};for (int i=0;i<9;i++){scanf("%d ",&a[i]);}scanf("%d",&a[9]);//統計過程int Pcount=0;int Ncount=0;for (int x=0;x<10;x++){if (a[x]<0)Ncount+=1;else if(a[x]>0)Pcount+=1;}printf("positive:%d\n",Pcount);printf("negative:%d",Ncount);return 0; }(五)CSimplemathproblem
題目描述
這一節課,Priest給大家做了一個小測試。
老師給了你兩個正整數X, Y。并按照一下規則做運算,求出答案Z。
如果X是Y的因數,則Z等于X + Y。否則Z = Y - X。
輸入描述:
輸入兩個正整數X, Y。? (1 <= X <= Y <= 100000000000000)。輸出描述:
輸出你的答案Z。輸入示例:
4 12輸出示例:
16輸入示例:
7 100000000000輸出示例:
99999999993思路:
| int(9位數) | long(9位數) | long long(19位數) | |
| MIN | -2,147,483,648 | -2,147,483,648 | -9,223,372,036,854,775,808 |
| MAX | 2,147,483,647? | 2,147,483,647 | 9,223,372,036,854,775,807 |
代碼:
#include<iostream> using namespace std; int main(){long long x,y;cin>>x>>y;if (y%x==0)cout<<(x+y);else cout<<(y-x); }(六)jyq跳格子
題目描述
擔心大學生活過于苦悶,出題人決定帶著大家一起玩起來!
當然,想要成為優秀的ccnuacmer,”簡單”的腦力熱身活動必不可少。
給出連續的n個格子,編號為1~n,游戲開始時,位于編號為1的格子上,每次可以任意選擇跳兩格或者跳四格。跳躍次數無限制。判斷是否能夠恰好到達終點。
輸入描述:
一個正整數n,代表格子的數量1≤n≤10000001\le n \le 10000001≤n≤1000000輸出描述:
若可以恰好到達終點,輸出n;否則輸出-1;示例1:
輸入
5輸出
5示例2
輸入
6輸出
-1思路:設置兩個循環,當2格跳的次數分別為0,1,2...n/2+1的情況下,看看能不能和若干個4格把n拼湊出來。
代碼:
#include<iostream> using namespace std; int main(){int n;cin>>n;int x=n/2+1; //在下面的循環會用到int flag=0; //設置flag//設置循環,找出可以用2和4乘出來的情況for (int i=0;i<=x;i++){ for (int j=0;j<=x;j++){if (i*2+j*4==n-1)flag=1;break; //找到了,跳出循環}}if (flag==1)cout<<n; //可以被2和4組合出來else cout<<-1; //不可以被2和4組合出來 }(七)小名的回答
題目描述
總算到暑假了,小姐姐是非常的閑,所以想去找梅溪湖的小名玩,可是她從沒去過梅溪湖,所以只能憑小名告訴她的地方走,每次只能向上下左右四個方向走1步。小姐姐的坐標為(0,0),小名在(a,b),小姐姐有點近視,小名也有點近視。所以到了(a,b)也不一定能和小名會面,不過還好,小姐姐最后找到了小名。小姐姐想要小名知道自己來一趟是多么不容易,所以在聊天的過程中小姐姐說自己為了到這里走了n步。小名,你覺得她說的可能是真話么。有可能就輸出YES,否則輸出NO(如果用random的話,小姐姐覺得你好像不在意她,明年暑假就不來了)
輸入描述:
a,b,n(-1000<=a,b<=1000,a*b>0,1<=n<=2000)輸出描述:
"YES" or "NO"輸入示例:
2 2 4輸出示例
YES輸入示例:
1 9 2輸出示例
NO思路:首先把所有情況映射為第一區間內,方便計算。再細分成三種情況:
第一種,當走的步數n小于路程總和時,肯定是達到不了的;
第二種,當走的步數n大于或等于路程總和時,則意味著走了不必要的路,可能是剛走完又走回去再回來,也可能是拐拐彎彎,反正走的不是最短路線就完事兒了。如果多走的那些路,是2的整數倍,則說明兜兜轉轉都能到;
第三種:前提跟第二種一樣,如果多出來的路不能整除2,說明最后兩步肯定是到不了的,肯定走歪了。
?代碼:
#include<iostream> #include<stdlib.h> using namespace std; int main(){int a,b,n;cin>>a>>b>>n;//把每種情況都映射為在第一區間內//即a和b都大于零,方便計算int sum=abs(a)+abs(b);if (sum>n)cout<<"NO";else if ((n-sum)%2==0)cout<<"YES";elsecout<<"NO";}總結
以上是生活随笔為你收集整理的牛客刷题记录之语法入门选择结构篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pip更新超时失败之解法
- 下一篇: 好用的手机浏览器