codevs - 字符串 - 青铜合集

可怜这绝对是为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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值