NOI题解(1.5编程基础之循环控制)
2016-09-06 17:02
429 查看
01:求平均年龄
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int num[100]; int sum=0; for(int i=0;i<count;i++) { cin>>num[i]; sum+=num[i]; } cout<<fixed<<setprecision(2)<<sum/(float)count; return 0; }
02:财务管理
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { float num[12]; float sum=0; for(int i=0;i<12;i++) { cin>>num[i]; sum+=num[i]; } cout<<fixed<<setprecision(2)<<"$"<<sum/(float)12; return 0; }
03:均值
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; float num; float sum=0; for(int i=0;i<count;i++) { cin>>num; sum+=num; } cout<<fixed<<setprecision(4)<<sum/(float)count; return 0; }
04:求整数的和与均值
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int num; int sum=0; for(int i=0;i<count;i++) { cin>>num; sum+=num; } cout<<sum<<" "<<fixed<<setprecision(5)<<(double)sum/count;//float会wrong answer,我私以为float够用了,不知道为什么会错 return 0; }
05:最高的分数
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int num; int max=0; for(int i=0;i<count;i++) { cin>>num; if(max<num) max=num; } cout<<max; return 0; }
06:整数序列的元素最大跨度值
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int num; int min=1000; int max=0; for(int i=0;i<count;i++) { cin>>num; if(max<num) max=num; if(min>num) min=num; } cout<<max-min; return 0; }
07:奥运奖牌计数
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int a,b,c; int gold=0,sliver=0,cotton=0; for(int i=0;i<count;i++) { cin>>a>>b>>c; gold+=a; sliver+=b; cotton+=c; } cout<<gold<<" "<<sliver<<" "<<cotton<<" "<<gold+sliver+cotton; return 0; }
08:多边形内角和
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; int sum=0,num; for(int i=0;i<count-1;i++) { cin>>num; sum+=num; } cout<<(count-2)*180-sum ; return 0; }
09:奇数求和
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int m,n,temp,sum=0; cin>>m>>n; if(m%2==0) temp=m+1; else temp=m; while(temp<=n) { sum+=temp; temp+=2; } cout<<sum; return 0; }
10:满足条件的数累加
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int m,n,temp,sum=0; cin>>m>>n; for(int i=m;i<=n;i++) { if(i%17==0) sum+=i; } cout<<sum; return 0; }
11:整数的个数
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count,num; cin>>count; int time1=0,time5=0,time10=0; for(int i=0;i<count;i++) { cin>>num; if(num==1) time1++; if(num==5) time5++; if(num==10) time10++; } cout<<time1<<endl<<time5<<endl<<time10<<endl; return 0; }
12:与指定数字相同的数的个数
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int N,m,num; cin>>N>>m; int time=0; for(int i=0;i<N;i++) { cin>>num; if(num==m) time++; } cout<<time; return 0; }
13:乘方计算
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int a,n; cin>>a>>n; int num=1; for(int i=0;i<n;i++) { num=num*a; } cout<<num; return 0; }
14:人口增长问题
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int a; int n; cin>>a>>n; double num=(double)a; for(int i=0;i<n;i++) { num=num*(1.001); } cout<<fixed<<setprecision(4)<<num; return 0; }
15:银行利息
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int R,M,Y; cin>>R>>M>>Y; double num=(double)M; for(int i=0;i<Y;i++) { num=num*(1+(double)R/100); } cout<<(int)num; return 0; }
16:买房子
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int N,K; cin>>N>>K; int count=0; double money=200; double earn=0; while(earn<money) { money=200; for(int i=0;i<count;i++) money=money*(1+(double)K/100); count++; if(count>20)//不判断可能会超时 break; earn=count*N; //cout<<earn<<":"<<money<<endl; } if(count>20) cout<<"Impossible"; else cout<<count; return 0; }
17:菲波那契数列
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int num1=1,num2=1; int k; cin>>k; if(k<=2) cout<<"1"; else{ for(int i=0;i<k-2;i++) { int temp=num1+num2; num1=num2; num2=temp; } cout<<num2; } return 0; }
18:鸡尾酒疗法
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { int count; cin>>count; double num[21]; int num1,num2; for(int i=0;i<count;i++) { cin>>num1>>num2; num[i]=(double)num2/num1; } for(int i=0;i<count-1;i++) { if(num[i+1]-num[0]>0.05) cout<<"better"<<endl; else if(num[i+1]-num[0]<-0.05) cout<<"worse"<<endl; else cout<<"same"<<endl; } return 0; }
19:救援
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { double x,y; int num; int count; double sum=0; cin>>count; for(int i=0;i<count;i++) { cin>>x>>y>>num; sum+=2*(sqrt(pow(x,2)+pow(y,2))/50)+num*1.5; } cout<<ceil(sum); return 0; }
20:球弹跳高度的计算
#include "iostream" #include "math.h" #include "iomanip" using namespace std; int main() { double h; cin>>h; double h10; double hsum=0; for(int i=0;i<10;i++) { if(i!=9){ hsum+=h; h=h/2; hsum+=h;} else{ hsum+=h; h=h/2; h10=h; } } cout<<hsum<<endl<<h10<<endl; return 0; }
21:角谷猜想
#include "iostream" #include "math.h" #include "iomanip" /* 64位机下 int 4字节 ,long int 8字节 */ using namespace std; int main() { long int num;//这里用int会Output Limit Exceeded cin>>num; if(num==1) { cout<<"End"; }else{ while(num!=1){ if(num%2==0) { num=num/2; cout<<num*2<<"/2="<<num<<endl; }else{ cout<<num<<"*3+1="; num=num*3+1; cout<<num<<endl; } } cout<<"End"; } return 0; }
22:津津的储蓄计划
#include "iostream" using namespace std; int main() { int num[12]; for(int i=0;i<12;i++) { cin>>num[i]; } int money=300; int store=0; int flag=true; for(int i=0;i<12;i++) { if(money-num[i]>=0) { store+=(money-num[i])/100*100; money=money-(money-num[i])/100*100-num[i]+300; //cout<<store<<" "<<money<<endl; }else{ cout<<"-"<<i+1; flag=false; break;//不加break会WA,因为如果接下来的月份如果有不够支出的情况会输出最大月份 } } if(flag) cout<<store+store*0.2+money%300;//最后一个月可能剩下钱 return 0; }
23:药房管理
#include "iostream" using namespace std; int main() { int m,n,num[100]={0}; cin>>m>>n; for(int i=0;i<n;i++) { cin>>num[i]; } int count=0; for(int i=0;i<n;i++) { m=m-num[i]; if(m<0) { count++; m+=num[i]; } } cout<<count; return 0; }
24:正常血压
#include "iostream" using namespace std; int main() { int n; cin>>n; int num1,num2; int time=0,temp=0; for(int i=0;i<n;i++) { cin>>num1>>num2; if(num1>=90&&num1<=140&&num2>=60&&num2<=90) { temp++; }else { temp=0; } if(time<temp) time=temp; } cout<<time; }
25:求特殊自然数
#include "iostream" using namespace std; /* 七进制和九进制都是三位数,说明该数十进制范围是81~342 整数部分,(123)十进制==(234)七进制 竖除法,逆序取余 7 |123 ------ 7 | 17 - 4 左边为商 右边为余数 ----- 7| 2 - 3 ---- 7| 0 - 2 */ int get7(int num)//3位数 { int num1=0,num2=0,num3=0; num3=num%7; num=num/7; num2=num%7; num=num/7; num1=num; return num1*100+num2*10+num3; } int get9(int num)//3位数 { int num1=0,num2=0,num3=0; num3=num%9; num=num/9; num2=num%9; num=num/9; num1=num; return num1*100+num2*10+num3; } int getBack(int num)//3位数 { int num1=0,num2=0,num3=0; num1=num%10; num=num/10; num2=num%10; num=num/10; num3=num; return num1*100+num2*10+num3; } int main() { for(int i=81;i<=342;i++) { //cout<<i<<" "<<get7(i)<<" "<<get9(i)<<" "<<getBack(get9(i))<<endl; if(get7(i)==getBack(get9(i))) cout<<i<<endl<<get7(i)<<endl<<get9(i); } return 0; }
26:统计满足条件的4位数个数
#include "iostream" using namespace std; int main() { int count; cin>>count; int num=0; int n; for(int i=0;i<count;i++) { cin>>n; int d1=n%10; int d2=(n%100)/10; int d3=(n%1000)/100; int d4=n/1000; // cout<<d1<<" "<<d2<<" "<<d3<<" "<<d4<<endl; if(d1-d4-d3-d2>0) num++; } cout<<num; return 0; }
27:级数求和
#include "iostream" using namespace std; int main() { double sn=0; int K; cin>>K; int count=1; while(sn<=K) { sn+=1/(double)count; count++; } cout<<--count; return 0; }
28:分离整数的各个数位
#include "iostream" using namespace std; int main() { int num; cin>>num; while(num>=10) { cout<<num%10<<" "; num=num/10; } cout<<num; return 0; }
29:数字反转
#include "iostream" using namespace std; int main() { string str; cin>>str; bool isZero=false; bool flag=false; if(str=="0") isZero=true; if(str.at(0)=='-') { cout<<"-"; flag=true; } bool zeroF=true; int index=0; if(flag) index++; for(int i=0;i<str.length()-index;i++) { if(isZero) { cout<<str.at(str.length()-1-i); } else { if(str.at(str.length()-1-i)!='0') { cout<<str.at(str.length()-1-i); zeroF=false; } else { if(zeroF) continue; else cout<<str.at(str.length()-1-i); } } } return 0; }
30:含k个3的数
#include "iostream" #include "math.h" using namespace std; int main() { string str; int k; cin>>str>>k; int sum=0; int count=0; for(int i=0;i<str.length();i++) { if(str.at(i)=='3') count++; sum+=(str.at(str.length()-1-i)-48)*pow(10,i); } // cout<<sum<<" "<<count<<endl; if(sum%19==0&&count==k) { cout<<"YES"; }else{ cout<<"NO"; } return 0; }
31:开关灯
#include "iostream" using namespace std; void process(bool flag[],int k,int M) { for(int i=0;i<M;i++) { if((i+1)%k==0) flag[i] = !flag[i]; } } int main() { int M,N; cin>>M>>N; bool flag[M]; for(int i=0;i<M;i++) flag[i] = true; for(int i=1;i<=N;i++) { if (i == 1) { for(int i=0;i<M;i++) flag[i] = false; } else { process(flag, i, M); } } bool firstF = true; for(int i=0;i<M;i++) { if(!flag[i]) { if(firstF) { cout << i + 1; firstF = false; }else cout<<","<<i+1; } } }
32:求分数序列和
#include "iostream" #include "iomanip" using namespace std; int main() { float p = 1, q = 2, sum = 0; int N; cin >> N; for(int i=0;i<N;i++) { sum+=q/p; //qi+1= qi+ pi, pi+1=qi float tmp = q; q = q + p; p = tmp; } cout<<fixed<<setprecision(4)<<sum; }
33:计算分数加减表达式的值
#include "iostream" #include "iomanip" using namespace std; int main() { float sum = 0; int N; cin >> N; for(int i=1;i<=N;i++) { //1/1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 + ... + (-1)n-1·1/n if(i%2==1) sum += 1/(float)i; else sum -= 1/(float)i; } cout<<fixed<<setprecision(4)<<sum; }
34:求阶乘的和
#include "iostream" #include "iomanip" using namespace std; int getFactorial(int k) { int result = 1; for(int i=1;i<=k;i++) { result*=i; } return result; } int main() { int sum = 0; int N; cin >> N; for(int i=1;i<=N;i++) { sum+=getFactorial(i); } /*N 取值范围是2~11 因此sum最大值为43954713,在int的范围内*/ cout<<sum; // cout<<INT_MAX<<endl; }
35:求出e的值
#include "iostream" #include "iomanip" using namespace std; double getFac(double n) { if(n==1) return n; return n*getFac(n-1); } int main(void) { double n,e=1; cin>>n; for(int i=1;i<=n;i++) { e+=1/getFac(i); } cout<<fixed<<setprecision(10)<<e<<endl; }
36:计算多项式的值
#include "iostream" #include "iomanip" using namespace std; int main(void) { float x; int n; float sum = 1; cin>>x>>n; for(int i=1;i<=n;i++) { sum=sum*x+1; } cout<<fixed<<setprecision(2)<<sum<<endl; }
37:雇佣兵
#include "iostream" #include "iomanip" using namespace std; int main(void) { int M,N,X; cin>>M>>N>>X; //初始状态 int fight = N; int current_M = 0; while(1) { if(X*fight >= M) { X-=(M+fight-1)/fight; current_M+=M; }//循环结束条件:能量不够补充,说明战斗结束 else { break; } //参与战斗 fight += M / fight; current_M = 0; } cout<<fight; }
38:计算多项式的导函数
#include "iostream" using namespace std; //注意这道题的样例输入的错误了,没有总次数,输入只有两行 int main(void) { int n,C; cin>>n; for(int i=n;i>=0;i--){ cin>>C; if (n == 0) { cout << 0; } else { //最后一项为常数常数的导数为0且不输出 if(i!=0) { //数字之间有空格 if(i==1) cout << C*i; else cout << C*i<<" "; } } } }
39:与7无关的数
#include "iostream" using namespace std; bool have7(int num) { int temp; while(num) { temp = num%10; num = num/10; if(temp==7) { return true; } } return false; } bool divBy7(int num) { if(num%7==0) return true; else return false; } int main(void) { int result=0; int n; cin>>n; for(int i=1;i<=n;i++) { if(!have7(i)&&!divBy7(i)) { result += i * i; cout<<i<<endl; } } cout<<result; }
40:数1的个数
#include "iostream" using namespace std; int get1Count(int num) { int temp; int count = 0; while(num) { temp = num%10; num = num/10; if(temp==1) { count++; } } return count; } int main(void) { int result=0; int num; cin>>num; for(int i=1;i<=num;i++) { result+=get1Count(i); } cout<<result; }
41:数字统计
#include "iostream" using namespace std; int get2Count(int num) { int temp; int count = 0; while(num) { temp = num%10; num = num/10; if(temp==2) { count++; } } return count; } int main(void) { int result=0; int num1,num2; cin>>num1>>num2; for(int i=num1;i<=num2;i++) { result+=get2Count(i); } cout<<result; }
42:画矩形
#include "iostream" using namespace std; int main() { int width,height,full; char shape; cin>>height>>width>>shape>>full; if(full) { for(int i=0;i<height;i++) { for(int j=0;j<width;j++) { cout<<shape; } cout<<endl; } }else { for(int i=0;i<height;i++) { if(i==0 || i==height-1) { for (int j = 0; j < width; j++) { cout << shape; } cout << endl; } else { for (int j = 0; j < width; j++) { if(j==0 || j==width-1) cout<<shape; else cout<<" "; } cout << endl; } } } }
43:质因数分解
#include "iostream" #include "math.h" using namespace std; bool isPrime(int num) { for(int i=2;i<=sqrt(num);i++) { if(num%i==0) return false; } return true; } int main() { int num; cin>>num; //从小到大找,最后输出num/i,如果从大到小找输出i会超时 for(int i=2;i<=sqrt(num);i++) { if(num%i==0&&isPrime(i)) { cout<<num/i; break; } } }
44:第n小的质数
#include "iostream" #include "math.h" using namespace std; /*质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。*/ bool isPrime(int num) { if(num == 2) return true; int tmp = sqrt(num); for(int i=2;i<=tmp;i++) { if(num%i == 0) { return false; } } return true; } int main() { int n; cin>>n; int count = 0; for(int i=2;i<=1000000000;i++) { if(isPrime(i)) { count++; } if(count>=n) { cout<<i; return 0; } } }
45:金币
#include "iostream" #include "math.h" using namespace std; int step[10001];//step[i]存储第i天总共获取的金币数 int getCoins(int num) { int coin = 1; step[1] = 1; int index = 2; while(index<=num) { coin++; for(int j=1;j<=coin;j++) { //动态规划的思想 step[index]=step[index-1]+coin; index++; } } return step[num]; } int main() { int num; cin>>num; cout<<getCoins(num); }
相关文章推荐
- 1.5编程基础之循环控制44:第n小的质数
- 1.5编程基础之循环控制_ 01:求平均年龄
- 1.5编程基础之循环控制_15:银行利息
- 02: 均值(1.5编程基础之循环控制)
- 1.5编程基础之循环控制_29:数字反转
- 1.5编程基础之循环控制_29:数字反转
- NOI题解(1.2编程基础之变量定义、赋值及转换)
- NOI题解(1.12编程基础之函数与过程抽象)(待补全)
- NOI题解(1.9编程基础之顺序查找)(待补全)
- 北大OJ编程基础之循环控制数字反转
- NOI题解(1.10编程基础之简单排序)
- NOI题解(1.8编程基础之多维数组)(待补全)
- NOI题解(1.8编程基础之多维数组)(待补全)
- NOI题解(1.1编程基础之输入输出)
- 循环控制结构程序03 - 零基础入门学习C语言18
- Java基础学习笔记(一)环境变量配置,数据类型,运算符,控制语句,循环语句
- Java语言基础——循环控制语句while for
- 黑马程序员之WinForm编程基础学习笔记:页面上有一个文本框,文本框左侧和右侧各有一个按钮,点击左测按钮文本框中的文字向左循环滚动一次,点击右侧按钮文本框中的文字向右循环滚动一次。
- 【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试
- 循环控制结构程序05 - 零基础入门学习C语言20