这是, 一个读者朋友, 在知识星球上, 提到的, 两个笔试题儿, 第一, 第一个题目, 比较简单, 关键, 关键之处在于, 第二个题目, 那个「编程题」, 我文章里, 所写的, 解题思路, 应该不是, 最好的, 期望, 那些大神读者们, 能够给出, 更好的答案, 从而, 让这个, 充斥乐趣的, 程序世界, 再次增添, 一些乐趣, 所以, 所以, show your code。
第一题,求如下输出
#include "stdio.h"#define m(x,y) (x)<(y)?x:yint main(){printf("%dn",10*m(10,15));return 0;}
假如身为学生, 那么建议先瞅瞅题目, 接着在心里默默念叨一番之后再去接着看答案, 我晓得这是一道极其简单的题目, 然而也千万别疏忽大意。
输出:
15--------------------------------Process exited after 0.2808 seconds with return value 0请按任意键继续. . .
编程题
输入一个由字符所构成的串, 之后去判定其中数量最多的字符究竟是哪一个, 大写字符与小写字符都需要单独进行数量统计。
#include "stdio.h"#include "string.h"#define m(x,y) (x)<(y)?x:yint main(){int i=0,j=0,m=0;char s[100];char r[255];memset(r,0,sizeof(r));memset(s,0,sizeof(s));gets(s);m=strlen(s);printf("%d %sn",m,s);for(i=0;i{r[s[i]]++;//putchar(s[i]);}printf("n----------n");for(i=0;i<255;i++)printf("%d ",r[i]);printf("n----------n");for(i=0;i<255;i++){char tmp = 0;for(j=0;j<255-i;j++){if(r[i] > r[j]){tmp = r[j];r[j]=r[i];r[j]=r[i];}}}printf("n----p------n");for(i=0;i<255;i++)printf("%d ",r[i]);printf("n----------n");printf("%dn",r[254]);return 0;}
统计频率"/>
首先, 上面呈现的是一个由读友所提出的解决方案, 然而呢, 我对于这个方案并非十分满意。原因在于, 主要是觉得代码行数略微有点多。经历了长时间的冥思苦想之后, 想出了下面这个更为愚蠢的办法。
#include "stdio.h"#include "string.h"#include "stdint.h"int main(void){char s[100];uint16_t r[100];int m=0,i=0,j=0;uint8_t temp=0,max=0;memset(s,0,sizeof(s));memset(r,0,sizeof(r));gets(s);m = strlen(s);for(i=0;i{for(j=0;j{if( s[i] != ((r[j]>> 8)&0xFF) ){if(r[j] == 0){r[j] = (s[i] << 8)&0xFFFF;r[j] += 0x0001;break;}}else{r[j] += 0x0001;break;}}}temp = r[0]&0xFF;for(i=0;i{if(r[i] != 0)printf("%c:%dn",r[i]>>8,r[i]&0xFF);if((r[i]&0xFF) > temp){temp = r[i]&0xFF;max = i;}}printf(">>>%c:%dn",r[max]>>8,r[max]&0xFF);return (0);}
我依旧觉得这并非是最为理想的方案, 而后在知识星球那儿, 有一位读者给出了评论, 我瞧了评论之后从中获得了启发, 进而又实现了一次进化。
这个思路跟上面第一段代码相近, 对字符串里的每一个字符进行遍历, 字符属于char类型, 字符的值与「0 - 255」存在对应关系, 接着判断相同字符, 若与「0 - 255」的某个位置相同, 那么该位置数组的值就加1。
然后寻找最大只的时候,也要遍历一遍。
有着这样一个弊端, 那便是遇上几个字符数量相同且同为最多字符的情况时, 该如何将它们一同输出, 要是采用我第二个方法的话, 进行修改会相对容易些。
代码如下:
#include "stdio.h"#include "string.h"#include "stdint.h"int main(){uint8_t i=0,temp=0;uint8_t cos = 0;char s[100];char r[255];memset(r,0,sizeof(r));memset(s,0,sizeof(s));gets(s);i=strlen(s);printf("%dn%sn",i,s);for(i=0;i{r[s[i]]++;}temp = r[0];cos = 0;for(i=0;i{if(r[i] > temp){temp = r[i];cos = i;}}printf("%d:%c:%dn",cos,(char)cos,r[cos]);return 0;}

CopyrightC 2009-2025 All Rights Reserved 版权所有 芜湖人才网 本站内容仅供参考,不承担因使用信息、外部链接或服务中断导致的任何直接或间接责任,风险自担。如有侵权,请联系删除,联系邮箱:ysznh@foxmail.com 鄂ICP备2025097818号-15
地址: EMAIL:qlwl@foxmail.com
Powered by PHPYun.