您的位置:首页 > 其它

华为 2015 笔试题练习

2015-06-30 22:07 344 查看
一.2015 华为

1:



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>

int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}

int main()
{
char strIn[4096] = {'\0'};
char strTemp[4096] = {'\0'};
int numResult[4096] = { 0 };
int sizeIn;
int resultCount = 0; //结果数组索引
static int count = 0; //连续的数字计数

while( gets(strIn) != NULL)
{

sizeIn = strlen(strIn); //取得输入的字符串的大小,包括最后的结束符
if(sizeIn != 0)
{
//取得整形数组
for(int i =0; i < sizeIn;)
{
//取得整数
if(strIn[i] >= '0' && strIn[i] <= '9')
{
strTemp[count] = strIn[i];
count++;
}
else //遇到非数字
{
if(count != 0) //如果有数字,则取出来
{
//将得到的字符串转换成整形
numResult[resultCount++] = atoi(strTemp);
memset(strTemp, 0, 4096);
count = 0;
}
}
i++;
}
if(count != 0) //取得最后的整数
{
numResult[resultCount++] = atoi(strTemp);
count = 0;
}
qsort(numResult, resultCount, sizeof(int), cmp);
for(int i = 0; i < resultCount - 1; i++)
{
printf("%d ", numResult[i]);
}
printf("%d", numResult[resultCount - 1]); //打印最后一个元素
printf("\n");
resultCount = 0;
count = 0;
memset(strIn, 0, 4096);
memset(strTemp, 0, 4096);
memset(numResult, 0, 4096);
}
}
}


  

附:快速排序使用方法

C标准库快速排序:http://blog.csdn.net/masibuaa/article/details/5633498

C++快速排序:http://blog.csdn.net/zzzmmmkkk/article/details/4266888

2.描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:

[align=left](1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分[/align]
[align=left]输入:输入10个整数,取值0~100[/align]
[align=left]输出:输出及格线,10的倍数[/align]
[align=left]输入样例:61 51 49 3020 10 70 80 90 99[/align]
[align=left]输出样例:50[/align]

#define _CRT_SECURE_NO_DEPRECATE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;

int main()
{
vector<int> scoreVec;
int scoreTemp;
int line = 0;
while(1)
{
for(int i = 0; i < 10; i++)
{
scanf("%d", &scoreTemp);
scoreVec.push_back(scoreTemp);
}
sort(scoreVec.begin(), scoreVec.end());
if(scoreVec[0] >= 60)
line = 60;
else
{
line = (scoreVec[3] + scoreVec[4]) / 2 /10 *10;
cout << line << endl;
scoreVec.clear();
}
}
}


3.描述:一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。

[align=left]有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数和学生数一致。[/align]

[align=left]输入:电灯的数量[/align]
[align=left]输出:亮着的电灯数量[/align]
[align=left]样例输入:3[/align]
[align=left]样例输出:1[/align]

#define _CRT_SECURE_NO_DEPRECATE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;

int main()
{
int num = 0; //电灯数

while(1)
{
int number = 0;
int count[65535] = {0};
cin >> num;
number = 0;
//对每一个电灯统计被拉的次数,如果是偶数,则关;如果是奇数,则开。
for(int i = 1; i <= num; i++) //学生
{
for(int j = 1; j <= num; j++) //电灯
{
if(j % i == 0)
{
count[j]++;
}
}
}
for(int j = 1;j <= num; j++)
{
if(count[j] % 2 != 0 )
{
number++;
}
//count[j] = 0;
}
cout << number << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: