#J
J提要求是把全有大写字母表示的字符串按照A>B,B>C,,,Z>A的形式变换。
这个题相当简单,只需要一个strng ,然后以为一位换就可以了,中间判断一个是否为Z,是就变为A,不是就++。
值得注意的一点是:
输出格式的问题,题目中要求输出 #String n,中间空格容易忽略!!!
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j;
cin>>n;
string s;
for(i=1;i<=n;i++)
{
cin>>s;
for(j=0;j<s.size();j++)
{
if(s[j]=='Z') s[j]='A';
else s[j]++;
}
cout<<"String #"<<i<<endl<<s<<endl<<endl;
}
return 0;
}
#K
K题目要求输入一个数组,使每个数都变成他们的平均数大小,且每次只能从大于平均数的数上减掉1在加给小于平均数的数,求最少变化几次。
这个题仔细分析后发现,小于平均数的书一定会+1,+1,,加到等于平均数为止,共x次。大于平均数的数也会—1,—1,,减到等于平均数为止,共y次。显然x=y,且为答案。至于要一个for循环就能够解决问题。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j=1,m,aver,sum,s;
vector<int>v;
while(cin>>n&&n!=0)
{
sum=0;
s=0;
for(i=0;i<n;i++)
{
cin>>m;
v.push_back(m);
sum+=m;
}
aver=sum/n;
for(i=0;i<n;i++)
{
while(v[i]<aver)
{ v[i]++; s++; }
while(v[i]>aver)
{ v[i]--; s++; }
}
v.clear();
cout<<"Set #"<<j<<endl<<"The minimum number of moves is " <<s/2<<"."<<endl;
cout<<endl;
j++;
}
return 0;
}
#L
L题我做了12遍,并不是因为这题难,而是我提交时系统默认为C (gcc 4.7.2),而我没有注意看,知道实在不相信又错了,在突然看见的,在这里记下来提醒自己!!!
该题让输入一段话,倒序输出。
只需要一个reverse(s.begin,s.end) 函数就完了。
但是考虑到一句话中间包含空格,输入应该采用 getline(cin,s)来输入,再输入过程中,我发现getline()使用时会把输入n后的空格给读入,以致只能读入n-1个s,试了几遍都这样,课本上有没有相关知识,只好百度,,,,前面的读入空格什么的也是百度出来的,,,解决办法是前面加一个cin.sync(),或者cin.get()。
代码如下:
#include<bits/stdc++.h> using namespace std; int main() { string s; int n,i; cin>>n; cin.sync(); for(i=0;i<n;i++) { getline(cin,s); reverse(s.begin(),s.end()); cout<<s<<endl; s.clear(); } return 0; }