• 循环结构程序设计


    1.位数
    输入一个不超过10^9的正整数,输出它的位数.例如12735的位数是5.请不要使用任何数学函数,只用四则运算和循环语句实现.
    #include<iostream>
    using namespace std;
    int main()
    {
     float maxmal= 1000000000;
    int a=234234,i=0,b=1,t=1;
    while(b>=1){
            b=a/t;
            t=t*10;
            if(b>=1){
            i++;
            }
        }
    cout<<i<<endl;
    return 0;
    }
     
    2.水仙花数
    输出(100-999)中的所有水仙花数.若3位数abc满足abc=a^3+b^3+c^3,则称其为水仙花数.例如153=1^3+5^3+3^3,所以153是水仙花数.
     
    #include<iostream>
    using namespace std;
    int main()
    {
        int a ,b,c,i;
    for(i=100;i<1000;i++){
       a = i/100;
       b = i/10%10;
       c = i%10;
       if(i==a*a*a+b*b*b+c*c*c)
        {
            cout<<i<<endl;
        }
    }
    return 0;
    }
     
    3.韩信点兵
    相信韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只要掠一眼队伍的排尾就知道总人数了.输入3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解).已知总人数不小于10,不超过1000.
        样例输入: 2 1 6
        样例输出:41
        样例输入:2 1 3
        样例输出:No answer. 
        已知总人数不小于10,不超过100.
     
     
    #include<iostream>
    using namespace std;
    int main()
    {
        int a,b,c,m,n,l,temp,i=1,templi;
        bool flag=false;
        cin>>a>>b>>c;
        for(;i<=14;i++){
            temp=7*i+c;
                if((temp-b)%5==0&&(temp-a)%3==0&&temp<=100&&temp>=10){
                flag=true;
                templi=temp;
            }
        }
        if(flag){
            cout<<"最少人数为:"<<templi<<endl;
            }else{
            cout<<"No Answer"<<endl;
            }
     
            return 0;
    }
     
     
    4.倒三角形
    输入正整数n<=20,输出一个n层的倒三角形.
    #include<iostream>
    using namespace std;
    int main()
    {
        int i =0;
      cin>>i;
        string s="";
        string backs="";
        int k=i;
        for(;i>=0;i--){
            for(int j=0;j<2*i-1;j++)
                 s+="#";
        for(int h=0;h<k-i;h++){
              backs+=" ";
        }
        cout<<backs+s<<endl;
        s="";
        backs="";
     
    }
    return 0;
    }
     
    5.统计
    输入一个正整数n,然后读取n个正整数a1,a2,...,an,最后再读一个正整数m.统计a1,a2,...,an中有多少个整数的值小于m.
    #include<iostream>
    #include<vector>
    using namespace std;
     
    int main()
    {
        cout<<"输入的数字个数为"<<endl;
        int n,temp,m,k=0;
        cin>>n;
        vector<int> num;
        for(vector<int>::size_type index=0;index!=n;++index){
            cout<<"当前输入第"<<index+1<<"个"<<endl;
            cin>>temp;
            num.push_back(temp);
        }
        cout<<"再输入m的值"<<endl;
        cin>>m;
        for(vector<int>::iterator index=num.begin();index!=num.end();++index){
            if(*index<m){
                k++;
            }
        }
        cout<<"比m小的数有"<<k<<"个"<<endl;
        return 0;
    }
     
    6.调和级数
    输入正整数n.输出H(n)=1+1/2+1/3+1/4+...+1/n的值,保留3位小数.例如n=3时答案为1.833.
    #include<iostream>
    #include<vector>
    #include <iomanip>
    using namespace std;
     
    int main()
    {
        int n;
        double sum=0;
        cin>>n;
        for(int i=1;i<=n;i++)
            {
                sum+=1.0/i;
            }
        cout<<fixed<<setprecision(3)<<sum<<endl;
        return 0;
    }
     
    7,近似计算
    计算pi/4=1-1/3+1/5-1/7+...知道最后一项小于10^(-6)
     
    #include<iostream>
    #include<vector>
    #include <iomanip>
    using namespace std;
     
    int main()
    {
        int flag=1;
        int n =1;
        double sum=0.0;
        while(1.0/n>0.000001){
            sum+=flag*(1.0)/n;
            flag=(-1)*flag;
            n+=2;
        }
       // cout<<n<<endl;
        cout<<sum<<endl;
        cout<<3.1415/4<<endl;
     
    return 0;
    }
     
    8.子序列的和
    输入两个正整数n<m<10^6,输出  1/n^2+1/(n+1)^2+..+1/m^2,保留五位小数.例如n=2,m=4,答案是0.42361,n=65536,m=655360时答案是0.00001
     
     
    #include<iostream>
    #include<vector>
    #include <iomanip>
    using namespace std;
     
    int main()
    {
        int n,m;
        cin>>n>>m;
       long double  sum=0.0;
        for(int i = n;i<=m;++i)
            {
                sum+=1.0/i/i;
            }
        cout<<fixed<<setprecision(5)<<sum<<endl;
    return 0;
    }
     
    9.分数化小数
    输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位.a,b<=10^6,c<=100.例如a=1,b=6,c=4时应输出0.1667.
    #include<iostream>
    #include<vector>
    #include <iomanip>
    using namespace std;
     
    int main()
    {
    double a,b,c;
    double result;
    cin>>a>>b>>c;
    result=a/b;
    cout<<fixed<<setprecision(c)<<result<<endl;
    return 0;
    }
     
    10.排列
    用1,2,3,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解.提示:不必太动脑筋.
    #include<iostream>
    #include<vector>
    #include <iomanip>
    using namespace std;
    void checkNum(int num[]);
    int main()
    {
        int beg,beg2,beg3,a,b,c,d,e,f,g,h,i;
        int num[9];
     
        for(beg =123;beg<=987;beg++)
            {
                beg2 = 2*beg;beg3=3*beg;
                if(beg3<=987){
                    num[0]=beg/100;
                    num[1]=beg/10%10;
                    num[2]=beg%10;
                    num[3]=beg2/100;
                    num[4]=beg2/10%10;
                    num[5]=beg2%10;
                    num[6]=beg3/100;
                    num[7]=beg3/10%10;
                    num[8]=beg3%10;
                    checkNum(num);
     
                }
            }
     
    return 0;
    }
     
     
    void checkNum(int num[])
    {
        int result[9]={0,0,0,0,0,0,0,0,0};
        bool flag=true;
      for(int i =0;i<9;i++){
        switch(num[i])
        {
            case 1:
            result[0]++;
            break;
            case 2:
            result[1]++;
            break;
            case 3:
            result[2]++;
            break;
            case 4:
            result[3]++;
            break;
            case 5:
            result[4]++;
            break;
            case 6:
            result[5]++;
            break;
            case 7:
            result[6]++;
            break;
            case 8:
            result[7]++;
            break;
            case 9:
            result[8]++;
            break;
            case 0:
            return;
        }
      }
      for(int i =0;i<=8;++i){
        if(result[i]>1)flag=false;
      }
      if(flag==true)
        {
            for(int i =0;i<=8;++i){
                    if((i+1)%3==1){
                        cout<<"   ";
                    }
            cout<<num[i];
            }
            cout<<endl;
        }
     
    }
  • 相关阅读:
    CMU15-445 Project #2
    CMU15-445 Project #1 Buffer Pool
    挂分原因
    「杂谈」关于斜率优化维护凸包
    「题解」GYM 101620J Justified Jungle
    「题解」AGC 052 B Tree Edges XOR
    C++ MT19937 随机数 限制范围
    「题解」Codeforces 348C Subset Sums
    「学习笔记」联赛数论再学习
    「题解」洛谷 P4597 序列sequence
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3270030.html
Copyright © 2020-2023  润新知