循环结构程序设计

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;
    }
 
}
原文地址:https://www.cnblogs.com/crazycodehzp/p/3270030.html