奥特曼打怪兽
小X是个奥特曼迷,他收集了好多各种各样的奥特曼玩具,什么佐菲奥特曼、赛文奥特曼、杰克奥特曼等等。当然,这里为了简化问题,我们不区分奥特曼的种类。仅有奥特曼是不好玩的,还要有对手,所以小X也会收集各种怪兽玩具。
一天,小X把这些玩具排成一排。在某一秒,如果某个奥特曼的右边相邻位置存在怪兽,这个奥特曼就会把它打败并将它踢到自己的左边。换句话说,如果第i个位置是奥特曼,第i+1个位置是怪兽,那么1秒钟后会变成第i个位置是怪兽,第i+1个位置是奥特曼。
我们用U表示奥特曼,M表示怪兽,如果一开始的排列是这样的:UUMM,则
1秒后:UMUM
2秒后:MUMU
3秒后:MMUU
我们发现,一段时间后,所有的怪兽都会在所有奥特曼的左边,现在的问题是这个时间是多少秒?
输入
一行,一个长度为n的由U和M组成的字符串(n≤106)。
如果第i个字符是U,表示这个位置是奥特曼,如果是M,表示这个位置是怪兽。
输出
输出一个整数,表示将队伍中的所有怪兽移到奥特曼左边所需的秒数。
样例
UUMM
3
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
string n;
int u,m;
cin>>n;
for(int i=1;i<=n.size();i++)
{
if(n[i]=='U')
{
u=u+1;
}
else if(n[i]=='M')
{
m=m+1;
}
}
cout<<(u+m-1)/10<<endl;
return 0;
}
参考GPT和自己的思路:你的程序存在几个问题:
在循环中,应该从0开始遍历字符串,因为下标从0开始计数,而不是从1开始。
在统计U和M的个数时,变量u和m没有初始化,应该初始化为0。
在输出答案时,题目中要求的是把所有怪兽移到奥特曼左边的时间,而你的程序输出的是把所有怪兽移到奥特曼右边的时间。正确的计算方式应该是(u + m - 1) / m。
下面是修正过的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
string n;
int u = 0, m = 0; // 初始化为0
cin >> n;
for (int i = 0; i < n.size(); i++) { // 从0开始遍历
if (n[i] == 'U') {
u = u + 1;
} else if (n[i] == 'M') {
m = m + 1;
}
}
cout << (u + m - 1) / m << endl; // 输出把怪兽移到奥特曼左边的时间
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
int main()
{
int i,j, t, n;
float sum = 0.00;
int a[1000];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d",&a[i]);
sum = sum + a[i];
}
for (i = 0; i < n-1;i++)
for (j = i + 1; j < n;j++)
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
printf("%.2f,%d,%d\n", sum /n,a[n-1], a[0]);
return 0;
}