• 算法习题


    1.

    // 计算一个整数的位数.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>

    using namespace std;


    int wei(int a)
    {
     static int total=0;
     if(a/1000000000!=0) return total=10;
     else if(a/100000000!=0) return total=9;
     else if(a/10000000!=0) return total=8;
     else if(a/1000000!=0) return total=7;
     else if(a/100000!=0) return total=6;
     else if(a/10000!=0) return total=5;
     else if(a/1000!=0) return total=4;
     else if(a/100!=0) return total=3;
     else if(a/10!=0) return total=2;
     else if(a%10!=0) return total=1;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int a,b=1,c=1;
     cout<<"请输入一个整数"<<endl;
     cin>>a;
     cout<<wei(a)<<endl;
     for(int i=1;i<=9;++i)
     {
      b*=10;
      if(a/b!=0)++c;
     }
     cout<<c;
     return 0;
    }

     2.

    // 水仙花数.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    using namespace std;

    int daffodil(int x)
    {
     int ge,shi,bai,sum=0;
     ge=x%10;
     //cout<<ge<<endl;
     shi=(x/10)%10;
     //cout<<shi<<endl;
     bai=x/100;
    // cout<<bai<<endl;
     sum=ge*ge*ge+shi*shi*shi+bai*bai*bai;
     return sum;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int a;
     cout<<"请输入一个数a:";
     cin>>a;
     //cout<<daffodil(a);
     if(a==daffodil(a))
      cout<<"a是一个水仙花数"<<endl;
     else cout<<"a不是水仙花数"<<endl;

     return 0;
    }

     3.

    // 韩信点兵.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    int hanxin(int a,int b,int c)
    {
     int i=1;
     while(!(i%3==a&&i%5==b&&i%7==c)) ++i;
     return i;
     
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int x,y,z;
     cout<<"请输入个按各队列排列之后的余数:x(x<3),y(y<5),z(z<7)"<<endl;
     cin>>x>>y>>z;
     cout<<"总人数:"<<hanxin(x,y,z)<<endl;
     return 0;
    }

     4.

    // 倒三角形.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>

    using namespace std;

    void triangle(int n)
    {
     for(int j=n;j>0;--j)
     {
      for(int k=0;k<n-j;++k)//输出前面的空格
       {cout<<" ";}
      for(int i=0;i<2*j-1;++i)//输出*
      {
      cout<<"*";
      }
      cout<<endl;
     }
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int a;
     cout<<"请输入倒三角形的层数:";
     cin>>a;
     triangle(a);//调用倒三角形
     return 0;
    }

     5.

    // 统计.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
     int n,a,m,occur=0;
     vector<int>vec;
     cout<<"请输入一个整数n"<<endl;
     cin>>n;
     cout<<"请输入n个整数分别是a1,...an"<<endl;
     for(int i=1;i<=n;i++)
     { cin>>a;
      vec.push_back(a);
     }
     cout<<"请输入一个数m来用于比较"<<endl;
     cin>>m;
     for(vector<int>::iterator iter=vec.begin();iter!=vec.end();iter++)
     {
      if(*iter<m) ++occur;
      //cout<<*iter;
     }
     cout<<occur<<endl;

     return 0;
    }

     6.

    // 调和级数.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    #include<iomanip>
    using namespace std;

    float harmony(int n)
    {
     double result=0.0;
     for(int i=1;i<=n;++i)
     {
      result+=(double)1/i;
     }
     return result;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int n;
     cout<<"请输入一个整数n:";
     cin>>n;
     cout<<fixed<<setprecision(3)<<harmony(n)<<endl;
     return 0;
    }

     7.

    // 近似计算.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>

    using namespace std;
    #define pi 3.14

    int _tmain(int argc, _TCHAR* argv[])
    {

     double i,result=0.0,a=pi/4;
     for(i=1;1/(2*i-1)>0.000001;++i)
     {
      
      if((int)i%2==0)
      {
       result-=1/(2*i-1);
        
      }
      else
      {
       result+=1/(2*i-1);
      
      }
      
     }
     cout<<"i="<<i<<endl;
     cout<<"real value:"<<endl;
     cout<<"pi/4="<<a<<endl;
     cout<<"appreciate value:"<<endl;
     cout<<"pi/4="<<result;

     return 0;
    }

     8.

    // 子序列的和.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    #include<iomanip>
    using namespace std;

    double subsequence(int m,int n)
    {
     double i;
     double result=0.0;
     i=m>n?n:m;
     for(;i<=(m>n?m:n);++i)
     {
      result+=1/(i*i);
     }
     return result;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     int m,n;
     cout<<"请输入两个整数:";
     cin>>m>>n;
     cout<<"m,n之间的子序列的和为:"<<endl;
     cout<<fixed<<setprecision(5)<<subsequence(m,n);
     return 0;
    }

    9.

    // 分数化小数.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    #include<iomanip>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
     int a,b,c;
     cout<<"请输入三个整数a,b,c:";
     cin>>a>>b>>c;
     cout<<fixed<<setprecision(c)<<(double)a/b<<endl;
     return 0;
    }

    10.(刚开始不会,后来仔细想一下外加参考了一下网上的代码)

    // 排列.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    using namespace std;

    int a[9];//定义一个数组来存储三个数中的每个数字

    int ok(int t,int *z) ///分解t的值,将其存入z指向的三个数组元素,若满足要求返回1
    {
     int *p1,*p2;
     for(p1=z;p1<z+3;p1++)
     {
      *p1=t%10; ///把t分解,得到个位上的数字
      t/=10;//十位上的数字
      for(p2=a;p2<p1;p2++) ///查询分解出的数字是否已经出现过
      if(*p1==0||*p2==*p1)return 0; ///若重复则返回
     }
     return 1; //否则返回满足要求1
    }

    int main()
    {
     int m,count=0;
     for(m=123;m<=333;m++) ///试探可能的三位数(首先要明白三个数当中最小的那个数不可能大于333,并且最小值为123.
           //中间的那个数不可能大于666)
     if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6))// /若满足题意

     cout<<"No."<<++count<<":"<<m<<" "<<2*m<<" "<<3*m<<endl;
    }


    /*
    第二种方法
    int f1(int a)
    {
        int b=0;
        while(a)
        {
            int n=a%10;
            a/=10;
            b+=n;
          
        }
        return b;
    }

    int f2(int a)
    {
        int c=1;
      
        while(a)
        {
            int n=a%10;
            a/=10;
            c*=n;
          
        }
        return c;
    }
    int main()
    {
        for(int i=123; i<=987/3; i++)
        {
            if(  f1(i)+f1(2*i)+f1(3*i)==45 && f2(i)*f2(i*2)*f2(i*3)==362880)
                cout << i<<" "<<2*i<<" "<<3*i << endl;
        }
      
        return 0;
    }*/

  • 相关阅读:
    小程序历程
    关于两个字符串用加号连接
    关于数据类型的取值范围的理解
    求最小公倍数和最大公约数
    js关于两个字符串的加减乘除运算
    a:hover + 兄弟选择器(标签选择)失效的解决方法
    ul和li标签实现列表
    小图标的使用(插入icon图标)
    水平垂直居中
    【转】JMeter学习(三十七)Jmeter录制手机app脚本
  • 原文地址:https://www.cnblogs.com/ljy2013/p/3268881.html
Copyright © 2020-2023  润新知