acm训练 2017 02 20
来源:互联网 发布:php完全自学手册 编辑:程序博客网 时间:2024/09/21 06:34
练习一 零起点学算法68——删除字符
Description
从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。
Input
输入有多组测试数据。
每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符
Output
每组输出一行,删除了所有应删除字符后的字符串
Sample Input
ABCDE
E
ASD Dfg fhd
D
Sample Output
ABCD
AS fg fhd
测试代码一:
#include<stdio.h>#include<string.h>/*Description从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。Input输入有多组测试数据。每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符Output每组输出一行,删除了所有应删除字符后的字符串*/int fun_cut(char *ptoc, char a,int cnt); //删除字符串中指定字符并返还头指针int main(){ char str[100]; char a; while (gets(str) && gets(&a) != NULL) { char *ptoc = str; int i; int cnt = strlen(str); cnt = fun_cut(ptoc, a, cnt); for (i = 0; i < cnt; i++) printf("%c", *(ptoc + i)); printf("\n"); } return 0;}int fun_cut(char *ptoc, char a,int cnt) //删除字符串中指定字符并返还头指针{ int i,j; for (i = 0; i < cnt; i++) { for(;*(ptoc+i)==a;) { if (i == cnt - 1) { cnt--; break; } else for (j = i; j + 1 < cnt; j++) *(ptoc + j) = *(ptoc + j + 1); cnt--; } } return cnt;}
运行结果:
测试结果:wrong!!!
!?完全不知道错在哪里
测试代码二:
#include<stdio.h>#include<string.h>/*Description从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。Input输入有多组测试数据。每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符Output每组输出一行,删除了所有应删除字符后的字符串*/void fun_cut(char *ptos, char ch); //删除字符串中指定字符并返还头指针int main(){ char str[100] = { 0 ,},ch,b; while (gets(str) != NULL) { ch = getchar(); b=getchar(); //过滤掉输入的换行符 fun_cut(str, ch); puts(str); } return 0;}void fun_cut(char *ptos, char ch) //删除字符串中指定字符并返还头指针{ char *_ptos_1 = ptos; for (; *ptos != 0; ptos++) if (*ptos != ch) *_ptos_1++ = *ptos; *_ptos_1 = 0;}
运行结果: 通过
小结:测试代码一程序编写没有到位,while (gets(str) && gets(&a) != NULL)语句没有实现获得str与a的目的,第一应该使用a=getchar()来获取a;第二,编写时没有考虑到换行符的影响,应当用一个变量b,来b=getchar()过滤掉换行符,于是精简程序得到如下代码
但是如图调试窗口所示,我需要的字符ch为\n换行符,b反而为我输入的空格字符,猜想到当使用getchar时它是从右开始录入字符的,当右数第一个字符被赋予给第一个getchar后,第二个getchar将右数第二个字符赋予下一个变量(换行符也算),于是将用于过滤换行符的语句放到靠后位置
练习二: 零起点学算法69——查找最大元素
Description
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入”(max)”。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
测试代码一:
#include<stdio.h>#include<string.h>/*Description对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。Input输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。Output对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。*/#define Pm printf("(max)")void fun_findmax(char *ptos);int main(){ char str[100]; while (gets(str) != NULL) { char *ptos = str; fun_findmax(ptos); } return 0;}void fun_findmax(char *ptos){ int i; int cnt = strlen(ptos); int max = (int)*ptos; for (i = 1; i < cnt; i++) max = max > *(ptos + i) ? max : *(ptos + i); for (i = 0; i < cnt; i++) { if((int)*(ptos + i)==max) { printf("%c", *(ptos + i)); Pm; } else printf("%c", *(ptos + i)); } printf("\n");}
运行结果:
测试结果:Aceepted!!
- acm训练 2017 02 20
- acm训练2017 02 19
- acm训练 2017 02 21
- acm训练 2017 02 22
- acm训练 2017 02 23
- acm 训练2017 03 06
- 2017ACM暑假训练总结
- acm训练
- ACM训练
- 2017-8-17ACM训练题
- 【训练计划】ACM训练计划
- ACM训练方案
- ACM训练方法
- ACM DP训练专辑
- ACM算法训练参照
- ACM训练计划表
- ACM训练表
- ACM训练方案
- 归并排序
- javaScript基础知识1
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Cassandra事务与关系型数据库事务有何区别
- 【Mac】用树莓派写第一个C语言程序
- acm训练 2017 02 20
- 严蔚敏数据结构第二版(p85,3)
- ANR
- win10系统 L2TP连接尝试失败:ERROR因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
- <The Art of Readable Code> 笔记二 (上)
- 12、SQL Server:SQL的四种连接-左外连接、右外连接、内连接、全连接
- fcc算法题
- linux学习笔记(一)
- C语言