NOI题解(1.5编程基础之循环控制)(待补全)

来源:互联网 发布:storm编程 书籍下载 编辑:程序博客网 时间:2024/06/04 19:15

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;}



0 0