文章目录
2025-4-15-C++ 学习 循环结构(3)
循环结构,继续,结构可能会更复杂的一些。
P1423 小玉在游泳
题目描述
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 2 2 2 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 98 % 98\% 98%。现在小玉想知道,如果要游到距离 s s s 米的地方,她需要游多少步呢。请你编程解决这个问题。
输入格式
输入一个实数 s s s(单位:米),表示要游的目标距离。
输出格式
输出一个整数,表示小玉一共需要游多少步。
输入输出样例 #1
输入 #1
4.3
输出 #1
3
说明/提示
数据保证, 0 ≤ s < 100 0 \leq s < 100 0≤s<100,且 s s s 小数点后最多只有一位。
题解代码
读懂题意,别着急。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double s;
cin >> s;
int k = 0;
double s_up = 0.0;
double tmp = 2.0;
while (s_up < s)
{
s_up += tmp;
tmp *= 0.98;
k++;
}
cout << k;
return 0;
}
P1307 [NOIP 2011 普及组] 数字反转
题目描述
给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 N N N。
输出格式
一个整数,表示反转后的新数。
输入输出样例 #1
输入 #1
123
输出 #1
321
输入输出样例 #2
输入 #2
-380
输出 #2
-83
说明/提示
【数据范围】
$-1,000,000,000\leq N\leq 1,000,000,000 $。
noip2011 普及组第一题
题解代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int flag = 0;
cin >> n;
int ans = 0;
if(n < 0)
{
n = -n;
flag = 1;
}
while(n>0)
{
ans = ans * 10 + (n % 10);
n /= 10;
}
if(flag)
{
cout << -1 * ans << endl;
}
else
{
cout << ans << endl;
}
return 0;
}
P1720 月落乌啼算钱(斐波那契数列)
题目背景
(本道题目木有隐藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完 pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
题目描述
算完钱后,月落乌啼想着:“你坑我!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第 n n n 样菜价格多少?”月落乌啼写出了:
F n = ( 1 + 5 2 ) n − ( 1 − 5 2 ) n 5 F_n=\dfrac{\left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n}{\sqrt{5}} Fn=5(21+5)n−(21−5)n
由于爱与愁大神学过编程,于是就用 1 1 1 分钟的时间求出了 F n F_n Fn 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出 F n F_n Fn 的值吗?
输入格式
一行一个自然数 n n n。
输出格式
只有 1 1 1 行一个实数 F n F_n Fn,保留两位小数。
输入输出样例 #1
输入 #1
6
输出 #1
8.00
说明/提示
对于所有数据: 0 ≤ n ≤ 48 0 \leq n\leq 48 0≤n≤48。
题解代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
double f[48];
f[0] = 0;
f[1] = 1;
f[2] = 1;
for(int k1=2;k1<=n;++k1)
{
f[k1] = f[k1-1] + f[k1-2];
}
cout << fixed << setprecision(2) << f[n] << endl;
return 0;
}
P5724 【深基4.习5】求极差 / 最大跨度值 / 最大值和最小值的差
题目描述
给出 n n n 和 n n n 个整数 a i a_i ai,求这 n n n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。
输入格式
第一行输入一个正整数 n n n,表示整数个数。
第二行输入 n n n 个整数 a 1 , a 2 … a n a_1,a_2 \dots a_n a1,a2…an,以空格隔开。
输出格式
输出一个整数,表示这 n n n 个整数的极差。
输入输出样例 #1
输入 #1
6
4 1 5 1 4 1
输出 #1
4
说明/提示
数据保证, 1 ≤ n ≤ 100 1 \leq n\leq 100 1≤n≤100, 0 ≤ a i ≤ 1000 0\le a_i \le 1000 0≤ai≤1000。
题解代码
记住分配数组的大小时,要注意给一个固定的常数。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
// 数组分配一定要注意,不要给未知数。
int a[100];
cin >> n;
int n_mx,n_mi;
for(int k1=0;k1<n;++k1)
{
cin >> a[k1];
if(k1 == 0)
{
n_mx = n_mi = a[k1];
}
else
{
if(a[k1] > n_mx) n_mx = a[k1];
if(a[k1] < n_mi) n_mi = a[k1];
}
}
cout << n_mx-n_mi << endl;
return 0;
}
P1420 最长连号
题目描述
输入长度为 n n n 的一个正整数序列,要求输出序列中最长连号的长度。
连号指在序列中,从小到大的连续自然数。
输入格式
第一行,一个整数 n n n。
第二行, n n n 个整数 a i a_i ai,之间用空格隔开。
输出格式
一个数,最长连号的个数。
输入输出样例 #1
输入 #1
10
1 5 6 2 3 4 5 6 8 9
输出 #1
5
说明/提示
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1≤n≤104, 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109。
题解代码
方法一:很不错的 for
循环灵活运用
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int a[10001];
for(int k1=0;k1<n;++k1)
{
cin >> a[k1];
}
int idx = 0;
int ans = 1;
int tmp = 1;
for(int k1 = idx;k1<n;++k1)
{
if(a[k1+1] == a[k1] + 1) tmp++;
if(tmp > ans) ans = tmp;
if(a[k1+1] != a[k1] + 1)
{
idx++;
tmp = 1;
}
}
cout << ans <<endl;
return 0;
}
方法二: 动态规划,挺难想的,还是觉得
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n+1],dp[n+1];
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int maxn=0;
for(int i=n;i>0;i--)
{
if(i==n)
{
dp[i]=1;
}
else
{
if(a[i+1]-1==a[i])
{
dp[i]=dp[i+1]+1;
}
else
{
dp[i]=1;
}
}
maxn=max(dp[i],maxn);
}
cout<<maxn;
return 0;
}