河南监理建设协会网站关键词seo排名优化软件
1001-四舍五入_牛客竞赛语法入门班数组模拟、枚举、贪心习题 (nowcoder.com)
题目描述
四舍五入是个好东西。比如你只考了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 而不是ifj++;i++;}max1=max(max1,j);//取最大值}printf("%d",max1);return 0;
}
Problem - 1777A - Codeforces
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!