时间:2021-07-01 10:21:17 帮助过:21人阅读
250pt: 题意:就是黑板上有三个数,有n次选择的机会,每次选择哪个数可以得到和那个数相同的分数,然后黑板上的该数减一。求n次选择最多能得到多少分。(注意分数减到0后就不在减)。 思路:水题啊,每次选择时排序即可,选择最大的。 代码: int getMaximu
250pt:
题意:就是黑板上有三个数,有n次选择的机会,每次选择哪个数可以得到和那个数相同的分数,然后黑板上的该数减一。求n次选择最多能得到多少分。(注意分数减到0后就不在减)。
思路:水题啊,每次选择时排序即可,选择最大的。
代码:
int getMaximumPoints(int A, int B, int C, int N) { int i,j,k; int sum = 0; int num[3] = {A,B,C}; for(int i = 1;i <= N; ++i){ sort(num,num+3); sum += num[2]; if(num[2] >= 1) num[2]--; } return sum; }
题意:有这样一种序列,s[0] < s[1] < s[2] < ... s[a+1] > s[a+2] > s[a+3] > ... >s[b] = s[b+1] = s[b+2] = ... = s[c] < s[c+1] < ... s[d+1] > s[d+2] > ... >s[n-1],而且小于的值都相等,也就是说s[0] 到 s[a] 是一个等差数列,s[a]到s[b]是一个等差数列,s[c] 到s[d] 是一个等差数列,s[d] 到 s[n-1] 是一个等差数列。判断所给的序列中是否满足这样的条件。对应输出“YES”
和“NO” 即可。
思路:其实就是模拟题了,不过细节问题需要注意,考虑清楚即可。
代码:
string isValid(vectorseq) { int i,j,k; string ss; int flag = true; int len = seq.size(); if(len < 5){ ss = "NO"; return ss; } else{ int a,b,c,d,e; i = 1; int x = seq[1] - seq[0]; if(x <= 0){ ss = "NO"; return ss; } while(i < len){ if(i >= len) break; while(seq[i+1] - seq[i] == x && x > 0){ i++; } a = i; x = seq[i+1] - seq[i]; while(seq[i+1] - seq[i] == x && x < 0){ i++; } b = i; x = 0; while(seq[i+1] - seq[i] == x){ i++; } c = i; x = seq[i+1] - seq[i]; while(seq[i+1] - seq[i] == x && x > 0){ i++; } d = i; x = seq[i+1] - seq[i]; while(seq[i+1] - seq[i] == x && x < 0 ){ i++; if(i == len-1)break; } e = i; if(a < b && b <= c && c < d && d < e ){ if(e == len-1){ ss = "YES"; return ss; } else{ ss = "NO"; return ss; } } else{ ss = "NO"; return ss; } if(i == len-1){ ss = "NO"; return ss; break; } } } ss = "NO"; return ss; }