第二周学习收获

培训题目描述

某培训机构的学员有如下信息:

  • 姓名(字符串)
  • 年龄(周岁,整数)
  • 去年 NOIP 成绩(整数,且保证是 5 的倍数 )

经过为期一年的培训,所有同学的成绩都有所提高,提升了 20%(当然 NOIP 满分是 600 分,不能超过这个得分)。

输入学员信息,请设计一个结构体储存这些学生信息,并设计一个函数模拟培训过程,其参数是这样的结构体类型,返回同样的结构体类型,并输出学员信息。

输入格式

输出格式

 不用结构体和函数直接实现也可以

#include <stdio.h>
int main()
{
	 int n,i,a,b;
	 char s[101];
	 scanf("%d",&n);
	 for(i=1;i<=n;i++)
	 {
	 	scanf("%s",s);
	 	scanf("%d %d",&a,&b);
	 	printf("%s",s);
	 	printf(" %d ",a+1);
	 	b=b*1.2;
	 	if(b>600)
	 	b=600;
		printf("%d\n",b);
	 }
 return 0;
}

文字处理软件 题目描述

你需要开发一款文字处理软件。最开始时输入一个字符串(不超过 100 个字符)作为初始文档。可以认为文档开头是第 0 个字符。需要支持以下操作:

  • 1 str:后接插入,在文档后面插入字符串 str,并输出文档的字符串。

  • 2 a b:截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串。

  • 3 a str:插入片段,在文档中第 a 个字符前面插入字符串 str,并输出文档的字符串。

  • 4 str:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。

为了简化问题,规定初始的文档和每次操作中的 str 都不含有空格或换行。最多会有 q(q≤100) 次操作。

输入格式

输出格式

输入输出样例

输入 #1

4
ILove
1 Luogu
2 5 5
3 3 guGugu
4 gu

输出 #1

ILoveLuogu
Luogu
LuoguGugugu
3

代码如下

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1110];
	char str[1000];
    char b[111];
    int n,i,j,m;
    int l,r;
    int k;
    scanf("%d",&n);
    scanf("%s",a);
    for(i=0;i<n;i++)
    {
        scanf("%d",&m);
        switch(m)
        {
        case 1:
            scanf("%s",b);
            strcat(a,b);
            printf("%s\n",a);
            break;
        case 2://只保留ab之间的 
            scanf("%d %d",&l,&r);
            a[l+r]='\0';//strcpy需要字符串2末尾为\0 
            strcpy(str, &a[l]);
            strcpy(a, str);
            printf("%s\n",a);
            break;
         case 3:
             scanf("%d %s",&k,str);
             strcat(str,&a[k]);
             a[k]='\0';
             strcat(a, str);
             printf("%s\n",a);
             break;
         case 4:
         	{
         	 int f=1;
             char keep[1000]={0};
             scanf("%s",str);
             for(k=0;a[k]!='\0';k++)
             {
                 if(a[k]==str[0])
                 {
                     for(j=0;j<strlen(str);j++)
                     {
                         keep[j]=a[k+j];
                     }
                     if(strcmp(keep,str)==0)
                     {
                         printf("%d\n",k);
                         f=0;
                         break;
                     }
                 }   
             }
             if(f) printf("-1\n");
			 }
       }
    }
}

压缩技术续集 题目描述

设某汉字由N × N的0和1的点阵图案组成。

我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推……

例如: 以下汉字点阵图案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111

对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一个数是N ,其余各位表示交替表示0和1 的个数,压缩码保证 N×N = 交替的各位数之和)

输入格式

汉字点阵图(点阵符号之间不留空格)。(3<=N<=200)

输出格式

一行,压缩码。

输入输出样例

输入 #1

0001000
0001000
0001111
0001000
0001000
0001000
1111111

输出 #1

7 3 1 6 1 6 4 3 1 6 1 6 1 
#include<stdio.h>
#include <string.h>
#include <math.h>
int main()
{
  char a[40100]={0};
  char b[205]={0};
  while((scanf("%s",b))!=EOF)
        strcat(a,b);//分行输入字符串并衔接 
  int i,k;
  int l=strlen(a);
  int c[40100];  
  int cent=0;
  for(i=0;i<=l;i++)
  	c[i]=a[i]-'0';
  k=sqrt(l);
  if(c[0]==1)
		printf("%d 0 ",k);
	else
		printf("%d ",k);
  for(i=0;i<l-1;i++)
	{
		if(c[i]==c[i+1])
			cent++;
		else
		{
			printf("%d ",cent+1);
			cent=0;
		}
	}
	if(c[l-2]==c[l-1])
		printf("%d",cent+1);
	else
		printf("1");
	return 0;
}

将字符串分行录入后转入整型数组,统一记录输出。scanf录入字符串遇到回车会自动加'\0',方便使用strcat函数,再统一减去'0'转为数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值