伞兵的日常训练(黄色)

Problem:A

Time Limit:1000ms

Memory Limit:65535K

Description

 跳伞是一个技术活,某空军新来了一批新兵,为了训练新兵跳伞的准确度,指挥官想了一个好办法,他在训练场画了一个矩阵,每个格子有一个数字,如果某士兵跳到了(x,y)格点,那么他的得分便是他周围的八个格子上的数字之和,现在给以一个n*m个矩阵,求出最大分值是多少。

Input

多组输入,第一行数一两个数 n,m,然后有一个n*m的矩阵,(n,m<=100),矩阵里的数字都小于1000.

Output

每组输出一个结果,最大分值

Sample Input

3 3
1 2 2
5 3 1
7 5 1

Sample Output

24
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int data[105][105];
    int inp[105][105];
    int m,n,i,j,max1;
    while(scanf("%d%d",&m,&n)!=-1)
    {
       memset(data,0,sizeof(data));
       memset(inp,0,sizeof(inp));
       for(i=1;i<=m;i++)
         for(j=1;j<=n;j++)
         scanf("%d",&inp[i][j]);
       max1=-999999;
       for(i=1;i<=m;i++)
         for(j=1;j<=n;j++)
         {
             data[i][j]=data[i][j]+inp[i-1][j]+inp[i-1][j-1]+inp[i-1][j+1];
             data[i][j]=data[i][j]+inp[i][j-1]+inp[i][j+1];
             data[i][j]=data[i][j]+inp[i+1][j]+inp[i+1][j-1]+inp[i+1][j+1];

         }
        for(i=1;i<=m;i++)
          for(j=1;j<=n;j++)
          if (max1<data[i][j]) max1=data[i][j];

          printf("%d\n",max1);
    }


    return 0;
}
伞兵的那个题老师在群里传题解了,已经很详细了,不再赘述
所以说,这个题可以不用进行两次二重for循环的,自己试着改改,嘿嘿

字符集合

Problem:B

Time Limit:1000ms

Memory Limit:65535K

Description

编写函数向给定一个字符集合中,插入一个新字符到指定位置:已知一个字符集,给定一个插入位置k,向该位置插入一个新字符。本题10分

Input

 输入数据有多组,每组的第1行为n(&lt;5),表示一组测试数据中字符集的个数,接下来原始字符串集(字符个数&lt;100),插入的字符及位置;

Output

输出插入后的新字符集,每组数据单独一行。

Sample Input

3
the c test
D
5
Now,you can commit.
Y
8
the game over.
N
6

Sample Output

the cD test
Now,you Ycan commit.
the gaNme over.

Hint

注意原始数据输入时,回车的处理。
 输出正常输完一行加个换行。
#include <stdio.h>
#include <string.h>

int main()
{
    char a[1000],b,d,e;
    int i,o,p,c,len;
    while(scanf("%d",&c)!=-1)
    for(o=0;o<c;o++)
    {
        getchar();
        gets(a);
        scanf("%c%d",&b,&i);
        len=strlen(a);
        d=a[i];
        a[i]=b;
        for(p=i+1;p<=len;p++)
        {
            e=a[p];
            a[p]=d;
            d=e;//依次向后串一个字符
        }
        puts(a);
    }
    return 0;
}
下面有写的更好的写法
#include <stdio.h>
#include <string.h>
char s[1005],a[10];
int m;
int main()
{
    int T;
    scanf("%d%*c",&T);
    while(T--)
    {
        gets(s);
        int n=strlen(s);
        scanf("%s%d%*c",a,&m);
        for(int i=0;i<m;i++)printf("%c",s[i]);
        printf("%c%s\n",a[0],s+m);//直接打印后面的字符串
    }
    return 0;
}

第1题

Problem:C

Time Limit:1000ms

Memory Limit:65535K

Description

星星和月亮
天空中有很多星星,这些星星用*号来表示;另外天空中有许多月亮,这些月亮用@来表示;现在让你计算星星的个数与月亮的个数的乘积,聪明的你能计算出来吗?

Input

输入数据有多组,每组为1个长度小于100的字符串,字符串中可能包含许多*和@等字符数字,但肯定没有空格。

Output

在一行内输出星星和月亮的数量的乘积。

Sample Input

---@@@--*-*0
22001166*

Sample Output

6
0

真的没啥好说的……

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 105;
char s[MAXN];
int main()
{
    while(cin>>s)
    {
        int len = strlen(s);
        int sum1=0, sum2=0;
        for(int i=0; i<len; i++)
        {
            if(s[i]=='*')
                sum1++;
            if(s[i]=='@')
                sum2++;
        }
        cout<<sum1*sum2<<endl;
    }
    return 0;
}

言语的力量

Problem:D

Time Limit:1000ms

Memory Limit:65536K

Description

其实,在言语中,有着一股不可轻视的力量。比如远古的大陆上,人们在战斗时会吼出Fus Ro Dah威慑敌人。再比如遥远的星系中外星人会说En Taro给予他人祝福。
那么他们到底有多少力量呢?现在有一种算法可以计算出来:每一段的首字母的ASCII码整除这一段的长度,再相加。现在请你来算一算给出的言语的力量。

Input

多组数据,每组数据一行字符串(包括大小写字母和空格,不保证空格位置)。
(保证长度小于500)

Output

每组数据输出一行,输出力量值。

Sample Input

Fus Ro Dah
En Taro

Sample Output

86
55
#include<iostream>
#include<cstdio>
#include<cstring>
int main()
{
    //freopen("data.in","r",stdin);
    //freopen("data.out","w",stdout);
    using namespace std;
    char a[1000];
    while(gets(a))
    {
        int sum=0;
        int len=strlen(a);
       for(int i=0;i<len;i++)
        {
            int count=0;
            if(a[i]>='A'&&a[i]<='z')
               {
                   int c=i;
                   while((a[i]!=' ')&&i<len)
                       {count++;i++;}
                     sum=sum+a[c]/count;
               }
        }
        cout<<sum<<endl;
    }
    return 0;
}

这个题貌似是练习strlen函数的

void基因组

Problem:E

Time Limit:1000ms

Memory Limit:65536K

Description

在Daten City生物体内的基因是由小写字母和空格组成,并且都有一块名为void的基因组,该基因组位于void子串开始到下一个空格(不包括void和空格).
如:基因为sss voidfff ab,则void基因组为fff.
邪恶的研究者想把该基因区域抽出来.你,就是邪恶的研究者.邪恶的你现在面对着两只抱在一起颤栗的草履虫......你需要做的是抽出两只草履虫的void的基因组然后合并.
Daten City的草履虫只有一个void基因组.

Input

输入数据有多组,每组第一行是第一只草履虫的基因序列,第二行是是第二只草履虫的基因序列.
因为是草履虫,所以基因序列不超过500.
保证void只有一个并且合法,void基因序列不为空.在void基因序列后肯定有空格(以空格为结束符).

Output

输出一行:两只草履虫的void的基因组合并后的序列(第一只在前,第二只在后,没有分隔符).

Sample Input

sss voidfff ab
ab voidex s s s

Sample Output

fffex
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int i;
    char a[500],b[500];
    while(gets(a)!=NULL)
    {
        gets(b);
        for(i=0;!(a[i]=='v'&&a[i+1]=='o'&&a[i+2]=='i'&&a[i+3]=='d');i++);
        i+=4;
        while(a[i]!=' '&&a[i]!='\0')
        {
             printf("%c",a[i]);
             i++;
         }
       for(i=0;!(b[i]=='v'&&b[i+1]=='o'&&b[i+2]=='i'&&b[i+3]=='d');i++);
        i+=4;
        while(b[i]!=' '&&b[i]!='\0')
        {
            printf("%c",b[i]);
            i++;
         }
        printf("\n");

    }
    return 0;
}

就是找void啊……

————由于这次的题实在是太简单了,题解没法写的更详细了……大家有不会的群里问吧