4.1 for语句和while语句
例 4-1
Apples。八尾勇今天又吃掉了 L (1<=L<=100)个苹果。她从吃第 1 个苹果开始,每吃一个苹果都会在纸上记录下来,在纸上写出一行“Today,I ate x apples.”,其中 x 是指吃到第几个苹果。在她吃第一个苹果时,别忘了 apple 这个单词后面不用加上代表复数的 s。她吃完苹果后,在纸上记录了什么内容?
解答
#include<iostream>
using namespace std;
int main()
{
int L,i;
cin>>L;
for(int i=1;i<=L;i++)
{
cout<<"Today,I ate "<<i<<" apple";
if(i!=0&&i!=1)
cout<<"s";
cout<<"."<<endl;
}
return 0;
}
例 4-2
找最小值(洛谷P5718)。
给出 n(n≤100) 和 n 个整数 a(0≤a≤1000),求这 n 个整数中最小值是什么。
输入输出样例
| 输入 | 输出 |
|---|---|
81 9 2 6 0 8 1 7 |
0 |
解答
#include<bits/stdc++.h>
using namespace std;
int m,n,s;
int main()
{
s=1001;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>n;
if(n<s)
s=n;
}
cout<<s;
}
例 4-3
分类平均(洛谷P5719)
给定 n(n≤10000) 和 k(k≤100),将从 1 到 n 之间的所有正整数可以分为两类:A 类数可以被 k 整除(也就是说是 k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。
数据保证两类数的个数都不会是 0。
输入输出样例
| 输入 | 输出 |
|---|---|
100 16 |
56.0 50.1 |
解答
解法一:
相加再除
#include<bits/stdc++.h>
using namespace std;
int n,k,n1c=0,n2c=0;
double n1=0.0,n2=0.0;
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
if(i%k==0)
{
n1+=i;
n1c++;
}
else
{
n2+=i;
n2c++;
}
}
cout<<setprecision(1)<<fixed<<n1/n1c<<' '<<n2/n2c;
return 0;
}
解法二
利用等差数列公式
Sn=n(a1+an)/2
#include <bits/stdc++.h>
using namespace std;
double a,b;
int n,k,c;
int main()
{
cin>>n>>k;
c=n/k; //n个数里面有n/k个k的倍数
a=c*(k+c*k)/2; //求c个k的和
b=n*(1+n)/2-a; //n个数的和减c个k的和则是剩下数的和
cout<<setprecision(1)<<fixed<<a/c<<' '<<b/(n-c);
return 0;
}
例 4-4
一尺之棰(洛谷P5720)
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a(a≤109) 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除2,向下取整)。第几天的时候木棍会变为 1?
输入输出样例
| 输入 | 输出 |
|---|---|
100 |
7 |
解答
模拟过程,整型默认向下取整。
#include<bits/stdc++.h>
using namespace std;
long long m,n=0;
int main()
{
cin>>m;
while(m!=1)
{
m=m/2;
n++;
}
cout<<n+1; //砍木头是从第二天开始的,这是个坑
return 0;
}
例 4-5
猜数游戏。小洛机器人和你玩猜数游戏!小洛随机选择并默默记下一个 1~100 的整数,你需要不断地猜测这个数字是什么并输入验证。如果你输入的数字比小洛选择的数字小,小洛会输出“Too small”;如果比小洛选择的数字大,小洛输出“Too large”;如果刚好猜对,小洛输出“You are right!!”。如果一次都没有猜中,则继续猜,知道猜中为止。
解答
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int ans,guess;
srand(time(0));
ans = rand()%100+1;
do
{
cin>>guess;
if(guess<ans)
cout<<"Too small"<<endl;
if(guess>ans)
cout<<"Too large"<<endl;
} while(ans != guess);
cout<<"You are right!!"<<endl;
return 0;
}
博主的个人网站:https://codespark.cn/

浙公网安备 33010602011771号