1. 程式人生 > >華為上機考試-2016-8-29

華為上機考試-2016-8-29

有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以後用3個空瓶子換一瓶滿的還給老闆。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?


輸入描述:

輸入檔案最多包含10組測試資料,每個資料佔一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。n=0表示輸入結束,你的程式不應當處理這一行。



輸出描述:

對於每組測試資料,輸出一行,表示最多可以喝的汽水瓶數。如果一瓶也喝不到,輸出0。


輸入例子:
3
10
81
0

輸出例子:
1
5

40

//飲料瓶換飲料
#include "stdafx.h"

#include <iostream>
using namespace std;
int func(int x)
{
	if(x==2)
		return 1;
	else
		return (x/3);
}
int main()
{
	int a[10];
	int b[10];
	int c[10];
	int i;
	for(i=0;i<10;i++)
	{
		cin>>a[i];
		if(a[i]==0)
		{
			break;
		}
	}
	for(int n=0; n<i; n++)
	{
		int m=0;
		b[n]=a[n];
		int temp;
		for(;b[n]>1;)
		{
			temp=func(b[n]);
			m=m+temp;
			if(b[n]<=2)
				b[n]=0;
			else
				b[n]=b[n]%3+b[n]/3;
		}
		c[n]=m;
		cout<<c[n]<<endl;
	}
	//cout<<endl;
	system("pause");
	return 0;
}

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。

Input Param 

     n               輸入隨機數的個數     

 inputArray      n個隨機整陣列成的陣列 

Return Value

     OutputArray    輸出處理後的隨機整數


注:測試用例保證輸入引數的正確性,答題者無需驗證。測試用例不止一組。


輸入描述:

輸入多行,先輸入隨機整數的個數,再輸入相應個數的整數



輸出描述:

返回多行,處理後的結果


輸入例子:
11
10
20
40
32
67
40
20
89
300
400
15

輸出例子:
10
15
20
32
40
67
89
300
400
#include "stdafx.h"

#include <iostream>
using namespace std;
int main()
{
	int n;
	int i=0;
	int a[1000];
	while(cin>>n)
	{
		if(n>1000)
			break;
		if(n<1)
			break;	
		int m;
		for(m=0;m<n;m++)
		{
			cin>>a[i];
			for(int l=0;l<i;l++)
			{
				if(a[i]==a[l])
				{
					i--;
					break;
				}
			}
			i++;
		}
		if(m==n)
			break;
	}
	for(int q=0;q<i;q++)
	{
		for(int j=q+1;j<i;j++)
		{
			if(a[q]>a[j])
			{
				int temp=a[q];
				a[q]=a[j];
				a[j]=temp;
			}
		}
		cout<<a[q]<<endl;
	}
	system("pause");
	return 0;
}

寫出一個程式,接受一個十六進位制的數值字串,輸出該數值的十進位制字串。(多組同時輸入 )


輸入描述:

輸入一個十六進位制的數值字串。



輸出描述:

輸出該數值的十進位制字串。


輸入例子:
0xA

輸出例子:
10
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int func(char x)
{
	if(x=='A')   return 10;
	if(x=='B')   return 11;
	if(x=='C')   return 12;
	if(x=='D')   return 13;
	if(x=='E')   return 14;
	if(x=='F')   return 15;
	if(x=='0')   return 0;
	if(x=='1')   return 1;
	if(x=='2')   return 2;
	if(x=='3')   return 3;
	if(x=='4')   return 4;
	if(x=='5')   return 5;
	if(x=='6')   return 6;
	if(x=='7')   return 7;
	if(x=='8')   return 8;
	if(x=='9')   return 9;
	else         return 0;
}
int main()
{  
	string s;
	int a;
	
	while(cin>>s)
	{
		//a=sizeof(s);
		//a=strlen(s);
		for(a=0;s[a]!='\0';a++);
		int temp;
		int sum=0;
		//a--;
		//cout<<a<<endl;
		for(int i=2;i<a;i++)
		{
			temp=func(s[i]);
			int bei=1;
			//if(i=a-1)
			//bei=1;
			// else
			for(int q=1;q<a-i;q++)
				bei=bei*16;
			sum=sum+temp*bei;
		}
		cout<<sum<<endl;
	}
	return 0;
}


撲克牌遊戲大家應該都比較熟悉了,一副牌由54張組成,含3~A,2各4張,小王1張,大王1張。牌面從小到大用如下字元和字串表示(其中,小寫joker表示小王,大寫JOKER表示大王):) 
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 
輸入兩手牌,兩手牌之間用“-”連線,每手牌的每張牌以空格分隔,“-”兩邊沒有空格,如:4 4 4 4-joker JOKER
請比較兩手牌大小,輸出較大的牌,如果不存在比較關係則輸出ERROR

基本規則:
(1)輸入每手牌可能是個子,對子,順子(連續5張),三個,炸彈(四個)和對王中的一種,不存在其他情況,由輸入保證兩手牌都是合法的,順子已經從小到大排列;
(2)除了炸彈和對王可以和所有牌比較之外,其他型別的牌只能跟相同型別的存在比較關係(如,對子跟對子比較,三個跟三個比較),不考慮拆牌情況(如:將對子拆分成個子)
(3)大小規則跟大家平時瞭解的常見規則相同,個子,對子,三個比較牌面大小;順子比較最小牌大小;炸彈大於前面所有的牌,炸彈之間比較牌面大小;對王是最大的牌;
(4)輸入的兩手牌不會出現相等的情況。

答案提示:
(1)除了炸彈和對王之外,其他必須同類型比較。
(2)輸入已經保證合法性,不用檢查輸入是否是合法的牌。
(3)輸入的順子已經經過從小到大排序,因此不用再排序了.

輸入描述:
輸入兩手牌,兩手牌之間用“-”連線,每手牌的每張牌以空格分隔,“-”兩邊沒有空格,如4 4 4 4-joker JOKER。


輸出描述:
輸出兩手牌中較大的那手,不含連線符,撲克牌順序不變,仍以空格隔開;如果不存在比較關係則輸出ERROR。

輸入例子:
4 4 4 4-joker JOKER

輸出例子:
joker JOKER