NENU 17级算法学习小组Round 4 0613

题目链接:Round 4 0613

密码:12345678

这次的题目都是英文题,但是都非常简单,都是code forces上div2的A题,最简单的题目,只要把题意读懂了就能做出来。

A题:这个题直接看上去好像很麻烦,得把大写字母转化成小写字母,删除其中的元音字母,在每个辅音字母前加'.',但是因为一个字母要么是元音,要么是辅音,所以只需要把元音跳过,辅音直接带点输出就好了。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[105];
int main()
{
    scanf("%s",a);
    for(int i=0;i<strlen(a);i++)
    {
        if(a[i]>=65&&a[i]<=90)  
            a[i]=a[i]+32;
        if(a[i]!='a'&&a[i]!='e'&&a[i]!='i'&&a[i]!='o'&&a[i]!='u'&&a[i]!='y')
            printf(".%c",a[i]);
    }
    return 0;
}

B题:输入MxN大小的矩形,已知多米诺骨牌大小为2x1(可以看做M行N列,多米诺牌大小占2行1列)。求能往矩形里放最多多米诺牌的数量是多少?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int n,m;
    cin>>m>>n;
    int ans=0;
    int a=m/2;
    ans=n*a;
    if(m%2==0)
        cout<<ans<<endl;
    else
        cout<<ans+n/2<<endl;
    return 0;
}

在博客上看到一种非常简洁的写法:

#include<cstdio>
int main(void)
{
    int m, n;
    scanf("%d%d", &m, &n);
    printf("%d", (n >> 1)*m + (n & 1 ? m >> 1 : 0));
    return 0;
}

C题:说有三个人组队去参加比赛,对于比赛的每道题目,如果两个或者两个以上的人会做,那么这个题就能做出来,否则,这个题就做不出来。

对于每组测试数据,第一行为一个小于等于1000的正整数,然后又n行,每行有三个整数,分别表示这三个人对于这三道题的情况,1表示会做,0表示不会做。输出一个正整数,表示他们三个人能做出来的题目数。

#include<cstdio>
int main(void)
{
    int n,a,count,sum = 0;
    scanf("%d",&n);
    while(n--)
    {
        count = 0;
        for (int i=0;i<3;i++)
        {
            scanf("%d",&a);
            if(a)
                count++;
        }
        if(count>1)
            sum++;
    }
    printf("%d", sum);
    return 0;
}

D题:给你一个字符串,这个串中只要有连着的0或1,且个数大于等于7,那么就输出YES,没有的话就输出NO。

#include <stdio.h>
#include <string.h>
int main()
{
    char s[110];
    while(scanf("%s",s)!=EOF)
    {
    	int size=strlen(s);
	int cnt=1;
	for(int i=0;i<size;i++)
	{
	    if(s[i]==s[i+1]) 
		cnt++;
	    if(cnt>=7)
	    {
		printf("%YES\n");
		break;
	    }
	    if(s[i]!=s[i+1])
		cnt=1;
	}
	if(cnt<7)
	    printf("NO\n");
    }
    return 0;
}

E题:输入一个由‘+’和数字组成的字符串,要求把数字进行从小到大进行排列,然后把这个字符串输出。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    char a[300];
    int b[300];
    scanf("%s",a);
    int cnt=1;
    int len=strlen(a);
    for(int i=0;i<len;i++)
    {
        if(a[i]!='+')
            b[cnt++]=a[i]-48;
    }
    sort(b,b+cnt);
    for(int i=0;i<cnt-2;i++)
        cout<<b[i]<<"+";
    cout<<b[cnt-2]<<endl;
    return 0;
}

F题:对一个字符串进行处理,如果它的首字母是小写字母,就把它的首字母变成大写字母,否则,就不处理。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    char a[1010];
    scanf("%s",a);
    if(a[0]>='a'&&a[0]<='z')
        a[0]-=32;
    cout<<a<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/flyzer/article/details/80646330