海码4月月赛总结

在“五一劳动节”,我们终于迎来了四月月赛(呵呵)。但这个月赛还是出得很有水平的,那笔者就带大家看一看这些题吧!

奥小白与小南老师游庐山

这道题从本质上来说比较水,但考察到了字符串的处理,还是非常考验技巧的。

解题思路

这道题说要以空格为字符的分界线,那么怎么处理就十分关键了,你可以像这样:

string a;
string s[6];
int t=1;
cin>>a;
for(int i=0;i<a.size();i++){
	if(a[i]!=' ')
		s[t]+=a[i];
	else
		t++;
}

是不是十分复杂?
Q:能不能在输入的时候就处理好呢??
A:可以的。
让我们来回顾一下各种输入字符串的方式和效果吧。

scanf

用 scanf输入以空格为分界,读到空格自动不输入了。
比如说,输入:I love coding,则scanf("%s",a) (没有&符号!) 则a数组里得到的是“I”一个字符串。是最适合本题的读入的。

gets

用gets,则得到的是一行,以“\n”为分隔符。
还是输入I love coding,则gets(a)得到的是“I love coding”。也很常用。

好的回归正题,所以用scanf就可以轻松解决本题了。

代码分析(具体看注释)

#include<bits/stdc++.h>
using namespace std;

int val(char* a)//计算a数组中的字符ASCII码平均值
{
	int len=strlen(a);
	int sum=0;
	for(int i=0;i<len;i++)
	{
		sum+=a[i];//sum记录总值
	}
	return sum/len;
}

int main()
{
	int score=0;
	char a[3][6][11];//第一维是行数,第二维是这一行中的第i个字,第三维是这个字第j个字符
	for(int i=1;i<=5;i++)
	{
		scanf("%s",a[1][i]);
	}
	for(int i=1;i<=5;i++)
	{
		scanf("%s",a[2][i]);//输入用scanf,没有“&”
	}
	for(int i=1;i<=5;i++)
	{
		int mns=abs(val(a[1][i])-val(a[2][i]));
		if(mns<=10)
		{
			score+=(11-mns);//根据题意,计算总值
		}
	}
	cout<<score<<endl;
	return 0;
	//结束了
}

奥小白与小南老师游南京

这道题是我参加比赛中最好玩的一道题,我在比赛中用二分做满分,但我的老师告诉我这道题正解应该是动归,很有意思,那我就带大家把这两种方法都梳理一遍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值