目录:
- 01:求平均年龄
- 02:财务管理
- 03:均值
- 04:求整数的和与均值
- 05:最高的分数
- 06:整数序列的元素最大跨度值
- 07:奥运奖牌计数
- 08:多边形内角和
- 09:奇数求和
- 10:满足条件的数累加
- 11:整数的个数
- 12:与指定数字相同的数的个数
- 13:乘方计算
- 14:人口增长问题
- 15:银行利息
- 16:买房子
- 17:菲波那契数列
- 18:鸡尾酒疗法
- 19:救援
- 20:球弹跳高度的计算
- 21:角谷猜想
- 22:津津的储蓄计划
- 23:药房管理
- 24:正常血压
- 25:求特殊自然数
- 26:统计满足条件的4位数个数
- 27:级数求和
- 28:分离整数的各个数位
- 29:数字反转
- 30:含k个3的数
- 31:开关灯
- 32:求分数序列和
- 33:计算分数加减表达式的值
- 34:求阶乘的和
- 35:求出e的值
- 36:计算多项式的值
- 37:雇佣兵
- 38:计算多项式的导函数
- 39:与7无关的数
- 40:数1的个数
- 41:数字统计
- 42:画矩形
- 43:质因数分解
- 44:第n小的质数
- 45:金币
01:求平均年龄
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,num=0;
float ave;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
num=num+a;
}
ave=num*1.0/n;
printf("%.2f",ave);
return 0;
}
02:财务管理
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
float a,sum=0;
for(int i=0;i<12;i++){
cin>>a;
sum=sum+a;
}
printf("$%.2f",sum/12);
return 0;
}
03:均值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
float a,sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
sum=sum+a;
}
printf("%.4f",sum/n);
return 0;
}
04:求整数的和与均值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
sum=sum+a;
}
printf("%d %.5f",sum,sum*1.0/n);
return 0;
}
05:最高的分数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,mx=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a>mx) mx=a;
}
printf("%d",mx);
return 0;
}
06:整数序列的元素最大跨度值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[1005],mx,mn;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
mn=a[0]; //假设a[0]是最小值
mx=a[0]; //假设a[0]是最大值
for(int i=0;i<n;i++){
if(a[i]>mx) mx=a[i];
if(a[i]<mn) mn=a[i];
}
printf("%d",mx-mn);
return 0;
}
07:奥运奖牌计数
提示:注意数组要定义在主函数外,不然会有初始值。写在里面就要将数组各项都初始化为0。
#include<bits/stdc++.h>
using namespace std;
int n,j,y,t,a[5];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>j>>y>>t;
a[1]+=j;
a[2]+=y;
a[3]+=t;
a[4]+=(j+y+t);
}
printf("%d %d %d %d",a[1],a[2],a[3],a[4]);
return 0;
}
08:多边形内角和
提示:将输入的n-1个角都累加起来,再通过公式一减,结果就出来了。
#include<bits/stdc++.h>
using namespace std;
int n,a,sum;
int main(){
cin>>n;
for(int i=0;i<n-1;i++){
cin>>a;
sum+=a;
}
printf("%d",(n-2)*180-sum);
return 0;
}
09:奇数求和
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int m,n,sum;
int main(){
cin>>m>>n;
for(int i=m;i<=n;i++){
if(i%2!=0) sum+=i;
}
printf("%d",sum);
return 0;
}
10:满足条件的数累加
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int m,n,sum;
int main(){
cin>>m>>n;
for(int i=m;i<=n;i++){
if(i%17==0) sum+=i;
}
printf("%d",sum);
return 0;
}
11:整数的个数
提示:注意数组是从0开始的,开10就只能到9,尽量大一些。
#include<bits/stdc++.h>
using namespace std;
int k,n,a[15];
int main(){
cin>>k;
for(int i=0;i<k;i++){
cin>>n;
a[n]+=1;
}
printf("%d\n%d\n%d",a[1],a[5],a[10]);
return 0;
}
12:与指定数字相同的数的个数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,m,a,sum;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a;
if(a==m) sum++;
}
printf("%d",sum);
return 0;
}
13:乘方计算
提示:定义一个变量s
为1,从1开始乘。
#include<bits/stdc++.h>
using namespace std;
int a,n,s=1;
int main(){
cin>>a>>n;
for(int i=0;i<n;i++){
s=s*a;
}
printf("%d",s);
return 0;
}
14:人口增长问题
提示:要用double
不然只能得9分。
#include<bits/stdc++.h>
using namespace std;
int x,n;
double num;
int main(){
cin>>x>>n;
num=x;
for(int i=0;i<n;i++){
num*=1+0.001;
}
printf("%.4lf",num);
return 0;
}
15:银行利息
提示:使用int
强制类型装换,去掉小数部分。
#include<bits/stdc++.h>
using namespace std;
int r,y,m;
double num;
int main(){
cin>>r>>m>>y;
num=m;
for(int i=0;i<y;i++){
num*=1+r*0.01;
}
cout<<int(num);
return 0;
}
16:买房子
提示:注意英文别打错了。房子价格的计算要放在循环的末尾,因为第一年放假是不变的。
#include<bits/stdc++.h>
using namespace std;
double n,k,num=200,money;
int main(){
cin>>n>>k;
for(int i=1;i<=20;i++){
money=money+n;
if(money>=num){
cout<<i;
return 0;
}
num=num*(k/100+1);
}
cout<<"Impossible";
return 0;
}
17:菲波那契数列
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int a[100],k;
int main(){
a[1]=1;
a[2]=1;
cin>>k;
for(int i=3;i<=k;i++){
a[i]=a[i-1]+a[i-2];
}
cout<<a[k];
return 0;
}
18:鸡尾酒疗法
提示:效果的计算是用有效案例除以总案例。
#include<bits/stdc++.h>
using namespace std;
int n;
float a[100],x,y;
int main(){
cin>>n;
cin>>x>>y; //x:总案例 y:有效案例
a[0]=y/x; //计算效果
for(int i=1;i<n;i++){
cin>>x>>y; //x:总案例 y:有效案例
a[i]=y/x; //计算效果
if(a[i]-a[0]>0.05) cout<<"better"<<endl;
else if(a[0]-a[i]>0.05) cout<<"worse"<<endl;
else cout<<"same"<<endl;
}
return 0;
}
19:救援
提示:题目描述容易看漏,样例只给了一个,但是有可能求多个数据,所以时间要进行累加。
#include<bits/stdc++.h>
using namespace std;
int n,f;
double x,y,s,t;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>x>>y>>f;
s=sqrt(x*x+y*y)*2;
t+=(s/50)+(f*1.5);
}
cout<<ceil(t);
return 0;
}
20:球弹跳高度的计算
提示:h
的结果为0.0195312,原题给的示例为0.0195313,应该是给错了。这个代码一样能过。
#include<bits/stdc++.h>
using namespace std;
double sum,h;
int main(){
cin>>h;
for(int i=1;i<=10;i++){
sum+=1.5*h; //计算每一次下落加上反弹起来的高度
h/=2;
}
sum=sum-h; //减去最终上升的高度
cout<<sum<<endl;
cout<<h<<endl;
return 0;
}
21:角谷猜想
提示:注意数据要开long long
格式化输出注意格式,也可以用cin
,cout
。
#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
cin>>n;
while(n!=1){
if(n%2==0){
printf("%lld/2=%lld\n",n,n/2);
// cout<<n<<"/2="<<n/2<<endl;
n/=2;
}
else{
printf("%lld*3+1=%lld\n",n,n*3+1);
// cout<<n<<"*3+1="<<n*3+1<<endl;
n=n*3+1;
}
}
if(n==1) cout<<"End";
return 0;
}
22:津津的储蓄计划
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int money,cun,ys,cun_money; //money:余额 cun:每月能存的钱 ys:每月预算 cun_money:总存钱数
int main(){
for(int i=1;i<=12;i++){
cin>>ys;
money+=300; //先加上妈妈给的300
if(money<ys){ //判断是否小于预算
cout<<-1*i; //输出负的月数
return 0;
}else{
cun=100*((money-ys)/100); //计算每月存钱数
money-=ys+cun; //减去预算和存的钱就是余下来的钱
cun_money+=cun; //加上每个月存的钱
}
}
cout<<cun_money*1.2+money;
return 0;
}
23:药房管理
提示:注意是大于等于的判断。
#include<bits/stdc++.h>
using namespace std;
int num,n,s,a;
int main(){
cin>>num>>n;
for(int i=0;i<n;i++){
cin>>s;
if(num>=s) num-=s;
else a+=1;
}
cout<<a;
return 0;
}
24:正常血压
提示:有可能会出现前面连续,最后一个不满足的情况,所以用一个容器mx来存储最大值。
#include<bits/stdc++.h>
using namespace std;
int n,a,b,t,mx;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b;
if(a>=90&&a<=140 && b>=60&&b<=90){
t+=1;
if(t>mx) mx=t;
}
else t=0;
}
cout<<mx;
return 0;
}
25:求特殊自然数
提示:
题目要求一个十进制数,它的七进制与九进制表示都是三位数,
那么可以先确定查找的范围,最小的7进制三位数100的十进制数是49,最小的9进制三位数100的十进制数是81;最大的7进制三位数666的十进制数是342,最大的9进制三位数888的十进制数是728。要满足7进制和9进制都是三位数,那么范围就是81~342。
十位数转任意进制的方式:除积倒取余
可以通过i/7/7%7
和i/9/9%9
求得7进制和9进制的百位数;
可以通过i/7%7
和i/9%9
求得7进制和9进制的十位数;
可以通过i%7
和i%9
求得7进制和9进制的个位数。
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
for(i=81;i<=342;i++){
if((i%9==i/7/7%7)&&(i/9%9==i/7%7)&&(i/9/9%9==i%7)){
cout<<i<<endl; //248
cout<<i/7/7%7<<i/7%7<<i%7<<endl; //503
cout<<i/9/9%9<<i/9%9<<i%9<<endl; //305
break;
}
}
return 0;
}
26:统计满足条件的4位数个数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,m,g,s,b,q,ans=0;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>m;
g=m%1000%100%10;
s=m%1000%100/10;
b=m%1000/100;
q=m/1000;
if(g-q-b-s>0){
ans++;
}
}
cout<<ans;
return 0;
}
27:级数求和
提示:注意除法计算的时候,用1.0不然得到的不是浮点数。
#include<bits/stdc++.h>
using namespace std;
double sn,k;
int n=1;
int main(){
cin>>k;
while(1){
sn+=1.0/n;
if(sn>k){
cout<<n;
break;
}
n++;
}
return 0;
}
28:分离整数的各个数位
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
long long n;
int a;
int main(){
cin>>n;
while(n!=0){ //n为0时结束
a=n%10; //取每一次的个位
n/=10; //每循环一次,整除10,n的位数不断变少
cout<<a<<" ";
}
return 0;
}
29:数字反转
提示:见代码,在上面代码的基础上做了修改。
#include<bits/stdc++.h>
using namespace std;
long long n;
int a,flag=0;
int main(){
cin>>n;
if(n==0) cout<<n; //为0时,直接输出
if(n<0){
cout<<"-"; //先输出负号
n=-1*n; //变成整数
}
while(n!=0){
a=n%10; //逐个取个位
n/=10; //舍去个位
if(a!=0||flag!=0){
cout<<a; //输出个位
flag++;
}
}
return 0;
}
30:含k个3的数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int m,k,num,n;
int main(){
cin>>m>>k;
num=m;
while(num!=0){
if(num%10==3) n++;
num/=10;
}
if(m%19==0 && n==k) cout<<"YES";
else cout<<"NO";
return 0;
}
31:开关灯
提示:通过0,1来模拟灯关闭和打开的状态。
#include <bits/stdc++.h>
using namespace std;
int a[5005],n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) a[i]=0; //为0时,灯关闭
for(int k=2;k<=m;k++){ //从第二个人开始操作都一样
for(int i=k;i<=n;i+=k) a[i]=!a[i]; //取反
}
int flag=0;
for(int i=1;i<=n;i++){
if(!a[i]){
if(flag==0) cout<<i;
else cout<<","<<i;
flag++;
}
}
return 0;
}
32:求分数序列和
提示:根据题意进行模拟。
#include<bits/stdc++.h>
using namespace std;
double q[35],p[35],sum;
int n;
int main(){
cin>>n;
p[1]=1;
q[1]=2;
sum=q[1]/p[1];
for(int i=1;i<n;i++){
p[i+1]=q[i];
q[i+1]=q[i]+p[i];
sum+=q[i+1]/p[i+1];
}
printf("%.4lf",sum);
return 0;
}
33:计算分数加减表达式的值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
double sum;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
sum+=pow(-1,i-1)/i;
}
printf("%.4lf",sum);
return 0;
}
34:求阶乘的和
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,sum;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int temp=1; //每换一个数就初始化为1
for(int j=1;j<=i;j++){
temp*=j; //计算阶乘
}
sum+=temp;
}
cout<<sum;
return 0;
}
35:求出e的值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
double n,sum=1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
double temp=1; //每换一个数就初始化为1
for(int j=1;j<=i;j++){
temp*=j; //计算阶乘
}
sum+=1/temp;
}
printf("%.10lf",sum);
return 0;
}
36:计算多项式的值
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
float x,sum;
int n;
int main(){
cin>>x>>n;
for(int i=n;i>=0;i--){
sum+=pow(x,i);
}
printf("%.2f",sum);
return 0;
}
37:雇佣兵
提示:这道题,题意需要理解一下。
1.雇佣兵的初始体力是0,最大体力是M;
2.战斗力为N,每战斗N天,战斗力提升1点;
3.拥有X个能量元素,每一个能量元素,能恢复的体力值不超过当前的战斗力N,且每次要恢复到最大体力M(比如现在战斗力为2,最大体力为5,每一个能量元素最多恢复2点体力,要恢复到5,就是2+2+2,至少需要3个能量元素)
4.M天为一个战斗周期,这个M天内,每过N天雇佣兵的战斗力就会上升一点,N为开始时的战斗力(比如开始时的战斗力是2,M为5,则5/2=2,M天结束,战斗力上涨2点)
#include<bits/stdc++.h>
using namespace std;
int m,n,x;
int main(){
cin>>m>>n>>x;
while(x>0){ //循环直到没有能量元素
for(int i=0;i<m;i+=n){ //每循环一次,增加n点体力,直到大于m
if(x>=1){ //如果能量元素大于等于1,则减少
x--; //能量元素减一
}else{ //否则表示能量元素耗尽了,还没有恢复到最大体力M
cout<<n; //直接输出之前的n
return 0; //结束程序
}
}
n+=m/n; //累加战斗力
}
cout<<n; //正常结束,输出n
return 0;
}
38:计算多项式的导函数
提示:这题样例有点问题。
#include<cstdio>
int main()
{
int n,c;
scanf("%d",&n);
if(!n)
{
printf("0");
return 0;
}
for(int i=n;i>0;i--)
{
scanf("%d",&c);
printf("%d ",c*i);
}
return 0;
}
39:与7无关的数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,sum,flag,temp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
temp=i;
flag=0;
while(temp!=0){
if(temp%10==7){
flag=1;
break;
}
temp/=10;
}
if(i%7!=0 && flag==0){
sum+=i*i;
}
}
cout<<sum;
return 0;
}
40:数1的个数
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,sum,temp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
temp=i;
while(temp!=0){
if(temp%10==1){
sum++;
}
temp/=10;
}
}
cout<<sum;
return 0;
}
41:数字统计
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int L,R,sum,temp;
int main(){
cin>>L>>R;
for(int i=L;i<=R;i++){
temp=i;
while(temp!=0){
if(temp%10==2){
sum++;
}
temp/=10;
}
}
cout<<sum;
return 0;
}
42:画矩形
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int h,l,f;
char c;
int main(){
cin>>h>>l>>c>>f;
for(int i=1;i<=h;i++){
for(int j=1;j<=l;j++){
if(i>1&&i<h && j>1&&j<l){
if(f==0) cout<<" ";
else cout<<c;
}
else cout<<c;
}
cout<<endl;
}
return 0;
}
43:质因数分解
提示:枚举小因子,小因子最大sqrt(x)
。
#include<bits/stdc++.h>
using namespace std;
long long n,flag;
int main(){
cin>>n;
for(int i=2;i<=sqrt(n);i++){
flag=0;
for(int j=2;j<sqrt(i);j++){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0 && n%i==0){
cout<<n/i;
return 0;
}
}
return 0;
}
44:第n小的质数
提示:见代码。
#include <stdio.h>
#include <math.h>
int main(){
int i,j,n,count=0;
scanf("%d",&n);
for(i=2;;i++){
for(j=2;j<=sqrt(i);j++){
if(i%j==0)break;
}
if(j>sqrt(i))count++;
if(count==n){
printf("%d\n",i);
return 0;
}
}
}
45:金币
提示:见代码。
#include<bits/stdc++.h>
using namespace std;
int n,sum,temp=1;
int main(){
cin>>n;
while(n>0){
for(int i=0;i<temp;i++){
sum+=temp;
n--;
if(n==0){
cout<<sum;
return 0;
}
}
temp++;
}
cout<<sum;
return 0;
}
以上为个人见解,欢迎指正!