题目:明明所在学校的惯例是在每学期的期末考试之后发放奖学金。
发放的奖学金共有五种,获取的条件各不相同:
-
院士奖学金:每人8000元,期末平均成绩高于80分,并且在本学期内发表1篇或1篇以上论文的学生均可获得。
-
五四奖学金:每人4000元,期末平均成绩高于85分,并且班级评议成绩高于80分的学生均可获得。
-
成绩优秀奖:每人2000元,期末平均成绩高于90分的学生均可获得。
-
西部奖学金:每人1000元,期末平均成绩高于85分的西部省份学生均可获得。
-
班级贡献奖:每人850元,班级评议成绩高于80分的学生干部均可获得。
只要符合条件就可以得奖。 每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如明明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
由于老师在学期末的时候很忙,所以,他把奖学金统计的事情交给明明做。老师把考试的相关数据给了明明,让他统计出以下数据:
1) 哪位同学获得的奖学金最多;
2) 获得最多奖学金的同学一共获得了多少奖学金;
3) 所有获得奖学金的同学一共获得了多少奖学金;
明明虽然很愿意帮老师这个忙,但是他发现,同学的数量很多,统计起来很麻烦,经常有统计出错的情况发生。于是明明就想请你帮一个忙,帮他写一个统计程序,统计出以上三项内容。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据有多行,每组测试数据的第一行有一个整数N(1≤N≤100),表示学生的总数。接下来的N行,每行是一位学生的数据,一行中从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格),期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100),是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是,发表的论文数是0到10的一个整数(包括0和10),每两个相邻数据项之间用一个空格分隔。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。
每组运算结果有三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。 如果有不止一名学生获得的奖学金最多,输出他们之中出现最早的学生姓名,第三行是这N个学生获得的奖学金的总数。输出时,每组运算结果其行首和行尾都没有任何空格或其他任何字符,每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果后面没有空行。 注:通常,显示屏为标准输出设备。
个人总结:
1、cin>>name>>score>>cscore>>leader>>west>>p这样的输入格式会让问题变简单
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int tag=0;
string mname;
string name;
int score,cscore,p;
char leader,west;
int max,sum;
while(cin>>n) {
if(tag>0) {
cout<<endl;
}
tag++;
max=0;
sum=0;
for(int i=0;i<n;i++) {
cin>>name>>score>>cscore>>leader>>west>>p;
int num=0;
if(score>80 &&p>=1) {
num+=8000;
}
if(score>85 &&cscore>80) {
num+=4000;
}
if(score>90) {
num+=2000;
}
if(score>85 &&west=='Y') {
num+=1000;
}
if(cscore>80 &&leader=='Y') {
num+=850;
}
if(num>max) {
max=num;
mname=name;
}
sum=sum+num;
}
cout<<mname<<endl;
cout<<max<<endl;
cout<<sum<<endl;
}
return 0;
}
**题目:**有一天,明明正在做作业,发现了一组很有趣的数字,例如1、11、313等等。他发现这些数字都是左右对称的,即不论你把这些数字从左读到右还是从右读到左,读出来的数字都是一样的。于是明明就把这个发现告诉了他爸爸。明明的爸爸是一名数学家,对此类型数字早有研究。他对明明说:"这些是回文数,是一种特殊的数字,即这些数字的左右两边是对称的。例如:11左右两边对称,313左右也是对称的。" 明明觉得这很有趣,接着问他爸爸还有什么和这类回文数有关的有趣的东西。明明的爸爸就说:"你把这些回文数转换成二进制数,看看是不是也符合回文数的规则。"明明发现1的二进制数也是1,符合回文数的规则;11的二进制数是1011,不符合回文数的规则;33的回文数是100001,符合回文数的规则。明明就回答爸爸说:"1和33的二进制数符合回文数的规则,11的二进制数则不符合回文数的规则。" 明明爸爸很满意明明的回答,又给了明明很多十进制数,让他判断在这些数中哪些数既是十进制回文数又是二进制回文数。明明起先做起来很有意思,但是时间一长就失去了兴趣。他想请你帮个忙,帮他写一个程序,用来判断一个数,它的十进制数是回文数,且它的二进制数也是回文数。
明明的问题可以归结为:给你一个整数(十进制),判断该整数的十进制数和它的二进制数是否全为回文数。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅有一行,每行有一个整数N(0 <= N <= 1000),表示要判断回文数的那个数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为"Yes"或"No",如果该数的十进制数和二进制数都是回文数,则输出"Yes"(不含双引号),否则输出"No"(不含双引号)。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。
个人总结:
1、result和r要初始化为 0,不然会受之前计算结果的影响,使判断结果完全错误
#include <bits/stdc++.h>
using namespace std;
int is10(int a){
int x,temp,result=0;
temp=a;
while(temp){
x=temp%10;
temp=temp/10;
result=result*10+x;
}
if(a==result){
return 1;
}else{
return 0;
}
}
int is2(int a){
int x,t,r=0;
t=a;
while(t){
x=t%2;
t=t/2;
r=r*2+x;
}
if(a==r){
return 1;
}else{
return 0;
}
}
int main(){
int a;
while(cin>>a){
if(a==0){
cout<<"Yes"<<endl;
}else{
if(is10(a)==1 &&is2(a)==1){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
}
}
**题目:**明明读小学的时候,不喜欢数学,尤其是不喜欢做加法,一做加法就头疼,这样导致明明长大后数学依然不好,而且对数字产生了抵触心理。可是不巧的是,明明进了一家会计公司,每天都要计算很多数据,在这些计算中加法运算居多,而且这些加法不只是是两个数之间的加法,更有多个数的连加。 例如:1+2+3的正确答案是6。 这给明明造成了很大的麻烦。你是明明的好朋友,看到明明如此痛苦,就产生了帮助明明的想法。你想帮明明写一个程序,这个程序能计算一串正整数的连加,从而帮助明明摆脱数字的困扰。 明明的问题可以归结为:给你一串正整数的连加表达式,完成这个表达式的计算。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅有一行,每行有一个表达式,表达式由正整数和加号("+")组成,不含其他任何符号,表达式中的数字小于等于30000,表达式的长度不超过1000,具体格式见输入样例。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个整数,即表达式的值。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。
个人总结:
1、不要忘记-'0'
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
int i;
while(cin>>s){
s=s+'+';
int sum=0,num=0;
int len=s.size();
for(i=0;i<len;i++){
if(s[i]=='+'){
sum=sum+num;
num=0;
}else{
num=num*10+(s[i]-'0');
}
}
printf("%d\n",sum);
}
}
翻译:
1、20世纪50年代末期,在计算机中使用晶体管标志着更小,更快,更通用的逻辑元件的出现,相比于真空管计算机来说,这是更有可能的实现的。因为晶体管耗费电力更少,并且有更长的寿命,仅这一发展就产生了被称为第二代计算机的改进型机器。组件变得更小,组件内部间隔也变得更小,并且这个系统的建造成本也变得更廉价。
2、20世纪60年代的集成电路(IC,见图1A-2)问世,从而有可能将许多晶体管制作在一块硅衬底上,晶体管之间用覆镀在适当位置的导线相连接。集成电路进一步降低了价格、体积和故障率。20世纪70年代中期,随着大规模集成电路(LSI)以及后来超大规模集成电路(VLSI,即微芯片)的出现,微处理器成为现实------它在单个硅衬底上蚀刻有数千个相互连接的晶体管。
3、然后,回到现代计算机的开关能力:20世纪70年代的计算机通常能够同时处理8个开关。也就是说,它们在每个周期可以处理8个二进制数字,或称比特(bit)的数据。8个比特组成的一组称为一个字节(byte),每个字节包含256种可能的开/关(或1和0)组合模式。每种模式都等价于一条指令、一条指令的一部分,或一种特定类型的数据,例如一个数字、一个字符或一个图形符号。例如,模式11010010可能是二进制数据------在本例中,是十进制数210------或者它可能是一条指令,告诉计算机将其开关中存储的数据与存储在某个存储芯片位置的数据进行比较。
