培训题目描述
某培训机构的学员有如下信息:
- 姓名(字符串)
- 年龄(周岁,整数)
- 去年 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'转为数字