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