这绝对是为14级的小朋友写了,看着我这么和蔼可亲的学姐的面子上,大家好好刷题吧。
codevs - 1205 -单词翻转:
输入一个英文句子 I love you ,输出 you love I ;
没错题目就是酱紫简单粗暴,代码是好久之前写的,直接copy过来,思路可能搓搓的,有更好的思路请评论告诉我哦。
1)把整个句子翻转:uoy evol i
2 ) 把每个单词再转回去: you love i
以上就是思路~
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int M = 3000 + 5;
char str[M];
int main()
{
while (fgets(str, M, stdin))
{
int len;
len = strlen(str);
int id;
if(str[len-1]=='\n')
{
id = len-1;
}
else id = len;
str[id] = ' ';
reverse(str, str + id);
//puts(str);
int sl = 0;
for (int i = 0; i <=len; ++i)
{
if (str[i] == ' ')
{
reverse(str + sl, str + i);
sl = (i + 1);
}
}
str[id] = '\0';
puts(str);
}
return 0;
}
codevs- 1485 - 字符配对
题目:
在一个字符串中,把相同的字符两两删除,求剩下字符的个数。
例如:字符串asasda,
首先删除两个'a',得到字符串'ssda'。
然后删除两个's',得到字符串'da'。
此时,字符串中没有了相同的字符,删除结束,剩下个数为2。
思路:
1)遍历,算出每个字母出现的次数。
2)出现的次数为奇数的答案加一。
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
const int M = 30;
int num[M];
using namespace std;
#define FOR(i,m,n) for(int i = m; i<n;++i)
int main()
{
string str, ans;
while (cin >> str)
{
int len = str.length();
memset(num, 0, sizeof(num));
int id = 0,tmp;
FOR(i, 0, len)
{
tmp = str[i] - 'a';
num[tmp]++;
id = id < tmp ? tmp : id;
}
int ans = 0;
for (int i = 0; i <= id; ++i)
{
ans += num[i] & 1;
}
cout << ans << endl;
}
return 0;
}
额。。。中间跨过两题实在是水得一塌糊涂的。
codevs - 2475 - Ry哥还是任意:
题目:
两个人玩石头剪刀布,判定谁赢!么错题目就是酱紫简单粗暴!
思路:
玩过的人都知道!
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
#define FOR(i,m,n) for( int i =m;i<n;++i)
char W[4] = "SJB";
int main()
{
char r,R;
int rywin = 0,ave=0;
int n;
cin >> n;
FOR(i,0,n)
{
cin >> r >> R;
if (r == R)
ave++;
else
for (int i = 0; i < 3; ++i)
{
if (r==W[i])
if (R == W[(i + 1) % 3])
rywin++;
}
}
if (n - rywin == rywin||ave==n)
puts("RY=ry");
else if (n - rywin < rywin)
puts("ry win");
else
puts("RY win");
return 0;
}
codevs-2780 -ZZWYYQWZHZ (我实在想不通为什么要叫这个名字。。
题目:
很你很多大数,这些数的长度最多不超过两百,最多有20个酱紫的数。
排序!从小到大排序!
思路:
int 存不下这中大数,long long 也不行。两百位呢,会爆掉的!
所以用字符串来存这些数,那么核心思想就是如何比较这些数啦。
除非你用的是java而不是c++。
只要做一个 sort 函数排序就ok了~
先比较,数字的长度是否一致,如果一致,用字典序比较,字典序小的排前面。
如果长度不一致,当然长度短的那个在前面~
例如:
1026
6 《-- 长度不一致 当然是长度短的那个数小
1087
1027 《-- 长度一致,前两位的都是一致的,那么从第三位开始,8的字典序比2的大,所以1027小排前面~
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
#define FOR(i,m,n) for( int i =m;i<n;++i)
typedef struct
{
string num;
int len;
}BIG;
BIG number[55];
bool cmp(BIG a,BIG b)
{
if (a.len == b.len)
return a.num.compare(b.num) < 0 ? true : false;
else return a.len < b.len;
}
int main()
{
int n;
cin >> n;
FOR(i, 0, n)
{
cin >> number[i].num;
number[i].len = number[i].num.length();
}
sort(number, number + n,cmp);
FOR(i,0,n)
cout <<number[i].num<< endl;
return 0;
}