大一组
绩点
Description
阿杰在大一学习了C++入门课程,这门课程的总绩点计算方法为:
总绩点=作业分数× 20% +小测分数× 30% +期末考试分数× 50%
阿杰想知道,这门课程的最终绩点。
Input
输入只有1行,包含三个非负整数A、B、C,分别表示阿杰的作业成绩、小测
分数和期末考试分数。相邻两个数之间用一个空格隔开,三项分数满分都是100分。
Output
输出只有1行,包含一个整数,即阿杰这门课程的总绩点,满分也是100分。
Sample Input 1
100 100 80
Sample Output 1
90
Sample Input 2
60 90 80
Sample Output 2
79
代码
#include<iostream> using namespace std; int a,b,c; int main(){ cin>>a>>b>>c; int res=0.2*a+0.3*b+0.5*c; cout<<res<<endl; return 0; }
字符串统计
Description
给定一个字符串,要求统计字符串的字符
注意:字符串中可能包含大、小写英文字母、数字字符、空格和换行符。统计字符串字符数时,空格和换行符不计算在内。
Input
输入只有一行,一个字符串s。
Output
输出只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
Sample Input 1
234
Sample Output 1
3
Sample Input 2
Ca 45
Sample Output 2
4
Hint
【输入输出样例2说明】
字符串中共有5个字符,包括1个大写英文字母,
1个小写英文字母和2个数字字符,
还有1个空格。由于空格不计入结果中,故标题的有效字符数为4个。
【数据规模与约定】
规定|s|表示字符串s的长度(即字符串中的字符和空格数)。
对于40%的数据,1 ≤ |s| ≤ 5,保证输入为数字字符及行末换行符。
对于80%的数据,1 ≤ |s| ≤ 5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于100%的数据,1 ≤ |s| ≤ 5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。
代码
#include<iostream> #include<cstring> using namespace std; int main(){ string s; getline(cin,s); int res=0; for(int i=0;i<s.size();i++) if (s[i]!=' '&&s[i]!='\n') res++; cout<<res; return 0; }
报销
Description
Min找老师报销费用。第一天,Min给老师一张发票;
之后两天(第二天和第三天),每天给老师两张发票;
之后三天(第四、五、六天),每天给老师三张发票;
之后四天(第七、八、九、十天),每天给老师四张发票……;
这种报销模式会一直这样延续下去:当连续N天每天收到N张发票后,老师会在之后的连续N+1天里,每天收到N+1张发票。
请计算在前K天里,老师一共获得了多少发票。
Input
输入只有1行,包含一个正整数K,表示上交发票的天数。
Output
输出只有1行,包含一个正整数,即老师收到的发票数。
Sample Input 1
5
Sample Output 1
11
Sample Input 2
1000
Sample Output 2
29820
Hint
【输入输出样例1说明】
老师第一天收到一张发票;第二天和第三天,每天收到两张发票;第四、五天,
每天收到三张发票。因此一共收到1+2+2+3+3=11张发票。
【数据说明】
对于100%的数据,1≤K≤10,000。
代码
#include<iostream> using namespace std; int n; long long res=0; int main(){ cin>>n; int j=0,k=0; for(int i=1;i<=10000&&i<=n;i++) for(int j=0;j<i&&k<n;j++,k++) res+=i; cout<<res; }
质因数分解
Description
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
Input
输入只有一行,包含一个正整数n。
Output
输出只有一行,包含一个正整数p,即较大的那个质数。
Sample Input 1
21
Sample Output 1
7
Hint
对于60%的数据,6 ≤ n ≤ 1000。
对于100%的数据,6 ≤ n ≤ 2 × 10 9 2 \times {10}^92×109
代码
#include<iostream> using namespace std; int main(){ long long n; cin>>n; for(long long i=2;i*i<=n;i++){ if (n%i==0){ cout<<n/i; return 0; } } }
骨牌(此题已砍)
Description
在一个有2 ∗ n 2*n2∗n个格子的大长方形槽内放置1 ∗ 2 1*21∗2的小骨牌,骨牌可以横放可以竖放,有多少种不同的放置方式可以将大长方形槽填满?
例如,当n = 3 n=3n=3时,一共有3种方式。
Input
输入只有一行,包含一个正整数n。
Output
输出只有一行,包含一个正整数res,即结果
Sample Input 1
3
Sample Output 1
3
Hint
对于100%的数据,1 ≤ n ≤ 50
题解
当n = 1 n=1n=1,有且只有一种摆法
当n = 2 n=2n=2,可以两个横放,也可以两个竖放,有二种摆法
当n = 3 n=3n=3,可以由n = 2 n=2n=2的情况再竖放一个骨牌得到,也可以由n = 1 n=1n=1的情况再横放两个骨牌得到(不能竖放两个骨牌,会与n = 2 n=2n=2的情况重复)。
以此类推,fn=fn−1+fn−2
代码
#include<iostream> using namespace std; long long f[55]; int main(){ f[1]=1; f[2]=2; int n; cin>>n; for(int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2]; cout<<f[n]; return 0; }
复数
Sample Input 1
1 2 3 4
Sample Output 1
4+6i -2-2i -5+10i
Sample Input 2
1 0 1 1