您当前的位置: 首页 >  面试

MIK C语言面试两题

发布时间:2020-08-10 08:03:24 ,浏览量:0

这是一个读者朋友在知识星球上提到的两个笔试题,第一个题目比较简单,关键在第二个题目「编程题」,我文章中写的解题思路应该不是最好的,希望大神读者们给出更好的答案,让这个充满乐趣的程序世界再增添一些乐趣吧,所以, show your code .

第一题,求如下输出
#include "stdio.h"


#define m(x,y) (x)<(y)?x:y
int main()
{
	printf("%d\n",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:y
int 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 %s\n",m,s);


	for(i=0;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("%d\n",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> 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>8,r[i]&0xFF);
		if((r[i]&0xFF) > temp)
		{
			temp = r[i]&0xFF;
			max = i;
		}
	}
	
	printf(">>>%c:%d\n",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("%d\n%s\n",i,s);


	for(i=0;i temp)
		{
			temp = r[i];
			cos = i;
		}	
	}
	printf("%d:%c:%d\n",cos,(char)cos,r[cos]);


	return 0;
}

 推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号 

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106485博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0477s