面试中遇到的编程题

测试时间60分钟
编程题1(30分)
设计3个线程,
线程1:每隔1秒对计数器count加2
线程2:每隔2秒对计数器count减1
线程3:监听count的数值,当count为5的整数倍的时候,输出该值,当count为100时,结束所有线程
编程题2(30分)
某应用中需要对一百万个整数元素进行排序,每个元素的取值在0~4之间。排序算法的基本思想是:对每一个元素x,确定小于等于x的元素个数(记为m),将x放在输出元素序列的第m个位置,对于元素值重复的情况,依次放入第m-1,m-2、···个位置。例如如果元素值小于等于3的元素个数有8个,其中元素值等于3的元素个数有2个,则3应该在输出元素序列的第8个位置,第7个位置上。
算法具体的步骤为:
1、统计每个元素值得个数
2、统计小于等于每个元素值的个数
3、将输入元素序列中的每个元素放入有序的输出元素序列
请根据算法要求完成排序算法
int [] sort(int [] array);//array为待排序的整数元素数组,返回是排序后的整数元素数组
编程题3(40分)

某咖啡店在卖咖啡的时候,可以根据顾客的要求在其中加入各种配料,咖啡店会根据加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类如下表格所示。

咖啡价格/杯(¥)配料价格/份(¥)
蒸馏咖啡Espresso25摩卡Mocha10
深度烘焙咖啡DarkRoast20奶泡Whip8

请使用装饰器(Decorator)模式画出类图,并完成类的实现以及一杯深度烘焙咖啡加摩卡和奶泡的费用计算功能。

//============================================================================
// Name        : RandNumber.cpp
// Author      : phoenix
// Version     : 1.0
// Copyright   : Your copyright notice
// Description : 参考程序编程题2, Ansi-style
//============================================================================

#include <iostream>
#include <stdlib.h>
#include <time.h>
#define ARRAYSIZE 1000

int* sort(int array[]);

using namespace std;

int main() {
	int *p;
	int *pstart;
	p = (int*)malloc(sizeof(int) * ARRAYSIZE);
	if(NULL==p)
	{
		cout << "Memory Apply ERR" <<endl;
		return -1;
	}
	srand((int)time(0));
	for(int i=0; i!=ARRAYSIZE; i++)
		*p++ = rand()%5;
	for(int j=1; j<=ARRAYSIZE; j++)
	{
		cout<< *p--<< " ";
		if(j%10 == 0)
			cout <<endl;
	}
	cout <<endl;
	pstart = sort(p);
	for(int j=1; j<=ARRAYSIZE; j++)
	{
		cout<< *pstart++<< " ";
		if(j%10 == 0)
			cout <<endl;
	}
	cout <<endl;
	free(p);
	return 0;
}

int* sort(int array[])
{
	int *p;
	int Number[5] = {0};
	int Count[5] = {0};
	p = array;
	for(int i=0; i!=ARRAYSIZE; i++)
	{
		if(0==array[i])
		{
			Number[0] += 1;
			Count[0] +=1;
			Count[1] +=1;
			Count[2] +=1;
			Count[3] +=1;
			Count[4] +=1;
		}
		if(1==array[i])
		{
			Number[1] += 1;
			Count[1] +=1;
			Count[2] +=1;
			Count[3] +=1;
			Count[4] +=1;
		}
		if(2==array[i])
		{
			Number[2] += 1;
			Count[2] +=1;
			Count[3] +=1;
			Count[4] +=1;
		}
		if(3==array[i])
		{
			Number[3] += 1;
			Count[3] +=1;
			Count[4] +=1;
		}
		if(4==array[i])
		{
			Number[4] += 1;
			Count[4] +=1;
		}
	}
	for(int j=0; j!=5; j++)
	{
		for(int i=0; i!=Number[j]; i++)
		{
			array[Count[j]-i] = j;
		}
	}
	return p;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值