题目描述
四舍五入是个好东西。比如你只考了45分,四舍五入后你是50分再四舍五入你就是满分啦!qdgg刚考完拓扑。成绩十分不理想。但老师觉得他每天都很认真的听课很不容易。于是决定给他一个提高成绩的机会:让他的成绩可以在小数点后的任意位置四舍五入(也可以四舍五入为最接近的整数)。
但是这是有限制的。qdgg只能四舍五入t次。请帮助qdgg找到他在不超过t次四舍五入可获得的最高成绩。请注意,他可以选择不使用全部t次机会。此外,他甚至可以选择完全不对成绩进行四舍五入。
在这个问题中,使用经典的舍入规则:将数字四舍五入到第n个数字时,必须先看一下数字n + 1,如果小于5,则第n个数字将保持不变,而所有后续数字替换为0。否则,如果n + 1位数大于或等于5,则位置n处的位数将增加1(如果此位数等于9,这也可能会更改其他一些位数),并且随后的所有位数数字将替换为0。最后,所有尾随的零将被丢弃。
例如,如果将数字1.14舍入到小数点后第一位,则结果为1.1,而如果将1.5舍入到最接近的整数,则结果为2。四舍五入到小数点后第五位的数字1.299996121将得出数字1.3。
输入描述:
输入的第一行包含两个整数n和t表示小数(含小数点)的长度以及四舍五入的次数。
第二行为一个字符串表示qdgg的初始分数。
输出描述:
一行表示qdgg能得到的最高分数(请勿输出尾零)
1012-方块与收纳盒_牛客竞赛语法入门班数组模拟、枚举、贪心习题 (nowcoder.com)
现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒
输入描述:
第一行是样例数T
第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。
输出描述:
对于每个样例输出对应的方法数
#include <iostream> using namespace std; long long a[90]; int main() { a[0] = 1; a[1] = 1; int n; cin >> n; for(int i = 2;i <= 80;i ++) { a[i] = a[i-1] + a[i-2]; } while(n --) { int x; cin >> x; cout << a[x] << endl; } }
时间(time) (nowcoder.com)
题目描述
Apojacsleam是一个喜欢特殊时刻的人。
他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零)。例如00:00就是回文时刻。
给定一个时刻,求此时刻的上一个和下一个回文时刻。
J题附加:00:00就是24:00,没有24:00这一时刻
J题附加:输入可能有前导0,输出不含前导0,例如10:1的意思是10:01,而10:10的输出为10:10
输入描述:
两个正整数,用“:”隔开,表示小时和分钟,保证输入时间合法。
输出描述:
两行,两个时刻(不含前导0),用“:”隔开,表示上一个时刻和下一个时刻
#include <cstdio> using namespace std; int main() { int a, b, A, B; scanf("%d:%d", &a, &b); A = a, B = b; while (true) { b--; //找之前的时间 if (b < 0) //回到上个小时 a--; b = (b + 60) % 60; //防止负数 a = (a + 24) % 24; if (a % 10 == b / 10 && b % 10 == a / 10) {//回文 printf("%d:%d\n", a, b); break; } } while (true) { B++; //找之后的时间 if (B == 60) //去到下个小时 A++; B = (B + 60) % 60; A = (A + 24) % 24; if (A % 10 == B / 10 && B % 10 == A / 10) { printf("%d:%d\n", A, B); break; } } return 0; }
「水」滔天巨浪 (nowcoder.com)
这个题没有要求输出前导0,如果要输出前导0,可以用%02d(宽度为2,左端补0)
题目描述
帕秋莉掌握了一种水属性魔法
在此之前,她已经忍了雾之湖上的妖精们很久了
现在,她决定反击!
雾之湖上有n只妖精排成一列,每只妖精的飞行高度严格单调递增,且高度1≤x≤1000
帕秋莉能清除掉列里面一个连续子区间的妖精,当且仅当它们被清理之后,帕秋莉仍然能还原出这个子区间的所有妖精的飞行高度
如,若妖精们飞行高度为1,3,4,5,6,8,那么可以清理飞行高度为4,5的两只妖精,因为清理之后,这两个空位之间的数据是唯一确定的
帕秋莉一次最多选择清除一个连续子区间,请问帕秋莉一次最多能清除多少妖精呢?
输入描述:
第一行一个整数n,表示有n只妖精下一行n个数ai,表示每只妖精飞行高度
输出描述:
输出一行,一个整数表示答案
#include<iostream> using namespace std; const int N=1010; int a[N]; int main() { int n,max1=0,b=0; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); a[n+1]=1001; for(int i=1;i<=n;i++) { int j=0; while(a[i]+1==a[i+1]&&a[i]-a[i-1]==1)//双指针算法 { //这里要用while 而不是if j++; i++; } max1=max(max1,j);//取最大值 } printf("%d",max1); return 0; }
cf的题就是妙,有的不能按它的字面意思来写
如果这样写,会爆掉
因为a[i+1]*=a[i]不合适
#include<iostream> using namespace std; const long long N=100010; long long a[N]; int main() { long long t; cin>>t; while(t--){ long long n,num=0; cin>>n; for(long long i=0;i<n;i++) { cin>>a[i]; } for(long long i=0;i<n-1;i++) { if(a[i]%2==0&&a[i+1]%2==0||a[i]%2==1&&a[i+1]%2==1) { num++; a[i+1]*=a[i]; } } cout<<num<<endl; } }
正确解法
#include<iostream> using namespace std; const long long N=100010; long long a[N]; int main() { long long t; cin>>t; while(t--){ long long n,num=0; cin>>n; for(long long i=0;i<n;i++) { cin>>a[i]; } for(long long i=0;i<n-1;i++) { if(a[i]%2==0&&a[i+1]%2==0||a[i]%2==1&&a[i+1]%2==1) { num++; //a[i+1]*=a[i]; } } cout<<num<<endl; } }
Code over!