- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言第四次作业会计学第1页/共24页11级第四次作业---删数问题1.【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S’最小。【输入形式】输入有两行:1.第一行是大整数S。其中S最长可达240位。 2.第二行是整数N。S、N均以非0数字开头。【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。【样例输入1】1785434【样例输出1】13【样例输入2】10021【样例输出2】002【样例说明】样例1中输入整数S=178543,N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S’ = 13。样例2中输入整数S=1002,N=1,删完一位后S’ = 002,而不是2,即2之前的0也必须输出。【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。【评分标准】该题要求输出一个大整数的各位数字。结果完全正确得20分,每个测试点4分。上传C语言文件名为delete.c。第2页/共24页本题解析: 这道题主要的障碍存在于两个方面:1.怎么读入 2.怎么删。 读入的话简单的说就是将一个数以字符串的形式存储下来然后通过字符串处理对数字的每一位进行操作。 删除的方式比较精髓。这里介绍一个比较容易懂的方法:每次删除都搜索第一个第i位比第i+1位大的,然后把第i位删掉。重复m次就可以得到最优解了。 第3页/共24页#include stdio.h#include string.hint main(){ char s[245]; int i,j,k; int n,m; scanf(%s,s); scanf(%d,m); n=strlen(s);/*这里是上面string.h中的函数,就是求s的长度的意思*/ for (i=1;i=m;i++)/*总共删m个数*/ { for (j=0;j=n-1;j++)/*从头到尾扫描*/ { if (s[j]s[j+1])/*如果这个数比下一个数大那么这个数要删掉*/ { for (k=j;k=n;k++)/*删除操作*/ s[k]=s[k+1]; break; /*删除结束退出扫描,继续删除下一个数*/ } } } printf(“%s”,s); /*输出*/ }第4页/共24页11级第四次作业---扩展字符2.【问题描述】编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。(教材 P63:Exercise 3-3)注意:待扩展字符串中有可能包含空格,例如:a-d x-z应扩展成:abcd xyz。所以读入待扩展字符串时,应能够读入包含空格的字符串。 只要缩记符号-之后的字符比之前的字符的ASCII码值大,就要将它们之间的所有字符扩展出来,例如:Z-a之间的字符也要扩展出来; 特殊情况:a-b-c将被扩展为:abc。a-a将被扩展为:a-a。 ?【输入形式】从键盘输入包含扩展符的字符串【输出形式】输出扩展后的字符串【输入样例】a-c-u-B【输出样例】abcdefghijklmnopqrstu-B第5页/共24页本题解析: 这个题目乍一看比较麻烦。。其实是这次作业中比较简单的题目之一。因为特殊的字符只有一个,那就是‘-’,只要判断好’-’这个题目就完成了。 这个方法比较朴素,就是用一个flag来表示前一个字符是不是‘-’如果不是‘-‘那么就输出这个字符,如果是的话就进行判断,判断这个字符跟’-‘前字符的关系,如果这个字符≤’-‘前字符,那就输出’-‘在输出这个字符。否则的话就从‘-’前字符到这个字符循环输出即可。第6页/共24页#include stdio.h#include string.hvoid expands(char s1[],char s2[]);int main(){ char s1[200],s2[200]; gets(s1);/*读入*/ expands(s1,s2); printf(%s,s2);} /*这个程序写的微微有些长,下页还有*/第7页/共24页void expands(char s1[],char s2[]){ int flag; char j; int i,l; int sum=-1; l=strlen(s1);/*确定字符串长度*/ flag=0; for (i=0;il;i++) { if (s1[i]==‘-’){flag=1;co
文档评论(0)