huawei 三套题

链接:https://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 

输入描述:

输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1

输入

3
10
81
0

输出

1
5
40


自己写的
 1 #include <iostream>
 2 using namespace  std;
 3  
 4 int main()
 5 {
 6     int m=10, n;
 7         while (m--&&cin >> n&&n >= 1 && n <= 100)
 8         {
 9                 int Y = 0;
10                 int sum = 0;
11                 while (n >= 3)
12                 {
13                     sum += n / 3;
14                     n = n / 3 + n % 3;
15                 }
16                 if (n == 2)
17                 {
18                     sum += 1;
19                 }
20                 if (n == 1);
21                 cout << sum << endl;
22                 sum = 0;
23         }
24     return 0;
25 }

 1 链接:https://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f
 2 来源:牛客网
 3 
 4 /*
 5 递归问题
 6 3个瓶子换1瓶水+1个空瓶子,两个瓶子换1瓶水+0个空瓶子,1个瓶子换0瓶水。
 7 f(1) = 0
 8 f(2) = 1
 9 f(3) = 1
10 f(4) = f(2)+1    //4个瓶子,其中3个可以换1瓶水+1个空瓶,所以是f(2)+1
11 f(5) = f(3)+1    //3个瓶子换1瓶水+1个空瓶,所以是f(3)+1
12 ...
13 f(n) = f(n-2)+1 */
14 #include <iostream>
15   
16 using namespace std;
17   
18 int f(int n)
19 {
20     if(n==1) return 0;
21     if(n==2) return 1;
22     return f(n-2)+1;
23 }
24   
25 int main()
26 {
27     int n;
28     while(cin >> n){
29         if(n==0)
30             break;
31         cout<<f(n)<<endl;
32     }
33     return 0;
34 }

链接:https://www.nowcoder.com/questionTerminal/3245215fffb84b7b81285493eae92ff0
来源:牛客网

[编程题]明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

 

 

Input Param 

     n               输入随机数的个数     

 inputArray      n个随机整数组成的数组 

     

Return Value

     OutputArray    输出处理后的随机整数

 


注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。


 

 


输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数



输出描述:

返回多行,处理后的结果

示例1

输入

11
10
20
40
32
67
40
20
89
300
400
15

输出

10
15
20
32
40
67
89
300
400





注意输入输出

 1 链接:https://www.nowcoder.com/questionTerminal/3245215fffb84b7b81285493eae92ff0
 2 来源:牛客网
 3 
 4 #include <iostream>
 5 using namespace std;
 6 int main() {
 7     int N, n;
 8     while (cin >> N) {
 9         int a[1001] = { 0 };
10         while (N--) {
11             cin >> n;
12             a[n] = 1;
13         }
14         for (int i = 0; i < 1001; i++)
15             if (a[i])
16                 cout << i << endl;
17     }
18     return 0;
19 }//阿西吧

链接:https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6
来源:牛客网

[编程题]进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )


输入描述:

输入一个十六进制的数值字符串。



输出描述:

输出该数值的十进制字符串。

示例1

输入

0xA

输出

10




 1 只是将字符串转换成十进制的数,程序就能通过,看来题目的目的只是将十六进制转换成十进制
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<math.h>
 5 int main()
 6 {
 7     char str[100];
 8     int i=0,count,sum;
 9     while(gets(str))//用于多次输入
10     {
11         count=strlen(str);//计算字符串的长度
12         sum=0;
13         for(i=count-1;i>=0;i--)//从十六进制个位开始,每位都转换成十进制
14         {
15         if(str[i]>='0'&&str[i]<='9')//数字字符的转换
16         {
17             sum+=(str[i]-48)*pow(16,count-i-1);
18         }
19         else if(str[i]>='A'&&str[i]<='F')//字母字符的转换
20         {
21             sum+=(str[i]-55)*pow(16,count-i-1);
22         }
23         }
24         printf("%d
",sum);
25     }
26     return 0;
27  }
 1 链接:https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6
 2 来源:牛客网
 3 
 4 #include <iostream> 
 5  using namespace std;
 6 
 7  int main()
 8  {
 9      int a;
10      while(cin>>hex>>a){
11      cout<<a<<endl;
12      }
原文地址:https://www.cnblogs.com/D-DZDD/p/7352787.html