求正整数2和n之间的完全数(一行一个数)。
完全数:因子之和等于它本身的自然数,如6=1+2+3
#include<iostream>
using namespace std;
int judge(int x); //定义函数,名为judge
int main()
{
int n;
int i;
cin>>n;
for(i=2; i<=n; i++)
if(judge(i)==i)//judge(i)为i的因子之和,judge(i)若与i相等,满足条件,输出
cout<<i<<endl;
return 0;
}
int judge(int x)
{
int i;
int sum=0;
for(i=1; i<=x-1; i++) //枚举1到x中,判断是否为x的因子
if(x%i==0)//若是x的因子,累加
sum+=i; //因子之和
return sum;
}
编程求2~n(n为大于2的正整数)中有多少个素数(质数)
#include<iostream>
#include<cmath> //sqrt所需的库
using namespace std;
bool judge(int x); //定义函数,名为judge
int main()
{
int n;
int i;
int sum=0; //用来存储个数
cin>>n;
for(i=2; i<=n; i++)
if(judge(i))//若是素数
sum++;//累加素数个数
cout<<sum<<endl;
return 0;
}
bool judge(int x)//判断素数
{
int i=2; //从2开始
while(i<=floor(sqrt(x))&&(x%i)!=0) //floor函数,“下取整”,或者说“向下舍入”,即去掉小数 floor(3.14)=3
i++;
if(i>floor(sqrt(x))) //素数或质数的判断标准 i>floor(sqrt(x))
return true;
return false;
}
如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数
#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int i;
for(i=10; i<=99; i++) //从10枚举到99 二位数
if( judge(i) && judge((i%10)*10+(i/10)) )//分别判断i以及i变换后((i%10)*10+(i/10))是否是素数
cout<<i<<endl;
return 0;
}
bool judge(int x)
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x))) //质数的判断标准
return true;
return false;
}
自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲和数(a<>b)。
#include<iostream>
using namespace std;
int judge(int n);
int main()
{
long int i;
for(i=1;; i++) //从1开始枚举 i=1;; i++
{
if( i==judge(judge(i)) && i!=judge(i) )//judge(judge(i))即为i因子之和的因子之和
{
cout<<i<<" "<<judge(i)<<endl;//i与judge(i)即满足条件的一组亲和数
break;//退出
}
}
return 0;
}
int judge(int n)
{
long int sum=0; //用来存储和
long int i;
for(i=1; i<n/2+1; i++) //n/2+1
if(n%i==0) //能被整除
sum+=i;
return sum;
}
如果一个数从左边读和从右边读都是同一个数,就称为回文数。
#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int i;
for(i=100; i<=999; i++) //从100枚举所有三位数
if( judge(i) && (i/100==i%10))//该数是素数且百位与个位相同 i/10 十位
cout<<i<<endl;//输出该数
return 0;
}
bool judge(int x)//判断素数
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x)))
return true;
return false;
}
哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。
#include<iostream>
#include<cmath>
using namespace std;
bool judge(int x);
int main()
{
int x;
int i;
for(x=6; x<=100; x+=2) //枚举6-100的偶数
for(i=2; i<=x/2; i++) //将x分解为i与x-i两个数 两个素数之和
if(judge(i)&&judge(x-i))//若被分解的两个数皆为素数
{
cout<<x<<"="<<i<<"+"<<x-i<<endl;//输出
break;//终止循环
}
return 0;
}
bool judge(int x)//判断素数
{
int i=2;
while( i<=floor(sqrt(x)) && (x%i!=0) )
i++;
if(i>floor(sqrt(x)))
return true;
return false;
}
简单计算器
#include<iostream>
using namespace std;
int calculate(int x,char z,int y);
int main()
{
int x,y;
char z;
cin>>x>>z>>y;//x、y为运算数,z为运算符
cout<<calculate(x,z,y)<<endl;//根据z进行计算,输出结果
return 0;
}
int calculate(int x,char z,int y)
{
if(z=='+') return x+y;
if(z=='-') return x-y;
if(z=='*') return x*y;
if(z=='/') return x/y;
if(z=='%') return x%y;
}
用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当月所发送的短信的字数,试统计一下你当月短信的总资费。
#include<iostream>
#include<cstdio>
using namespace std;
int calculate(int x);
int main()
{
int n,a;
int i;
double sum=0;
cin>>n;//输入当月发送短信总次数n
for(i=1; i<=n; i++)
{
cin>>a;//输入每次发送短信的字数
sum+=calculate(a);//累加每次短信的资费
}
printf("%.1lf\n",sum/10.0);//将以角为单位的数转为以元为单位的数,输出结果
return 0;
}
int calculate(int x)
{
if(x%70==0)
return x/70;
else
return x/70+1;
}
目前正是甲流盛行时期,为了更好地进行分流治疗,医院在挂号时要求对病人的体温和咳嗽情况进行检查,对于体温超过37.5度(含等于37.5度)并且咳嗽的病人初步判定为甲流病人(初筛)。现需要统计某天前来挂号就诊的病人中有多少人被初筛为甲流病人。
#include<iostream>
#include<string>
using namespace std;
bool judge(float x,int y);
int main()
{
int n;
float temperature[201];
int cough[201];
string name[201];
int sum=0;
int i;
cin>>n;//输入病人数
for(i=1;i<=n;i++)//依次输入姓名、体温、是否咳嗽
cin>>name[i]>>temperature[i]>>cough[i];
for(i=1;i<=n;i++)
if(judge(temperature[i],cough[i]))//进行判断
{
cout<<name[i]<<endl;//输出姓名
sum++;//总数+1
}
cout<<sum<<endl;//输出总数
return 0;
}
bool judge(float x,int y)
{
if((x>=37.5)&&(y==1))
return true;
else
return false;
}
给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string word,sentence;
int len1,len2;
int i,j;
int ans=0,direction;
getline(cin,word);//输入单词
getline(cin,sentence);//输入句子
len1=word.size();//记录单词的长度
len2=sentence.size();//记录句子的长度
for(i=0; i<len2; i++)
{
for(j=0; j<len1; j++)
{
if(toupper(sentence[i+j])!=toupper(word[j]))
break;//若字符不匹配退出循环,再从第i+1个开始判定
/*toupper()为将字符从小写转为大写的库函数*/
if(i>0&&sentence[i-1]!=' ')
break;//若第i个字符不是文章首且前一个字符不是空格,则不是独立单词,退出循环
}
if(j==len1&&(sentence[i+j]==' '||j+i==len2))//若循环判定通过,且该单词词尾为文章尾或后有空格
{
ans++;//累加满足条件单词数
if(ans==1)//若第一次出现
direction=i;//记录位置
}
}
if(ans)
cout<<ans<<" "<<direction<<endl;
else
cout<<"-1"<<endl;
return 0;
}