华为往年笔试题【空瓶子换水喝】

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

自己的笨解法:

 1 #include<iostream>
 2 #include<math.h>
 3 #include<string.h>
 4
 5 using namespace std;
 6
 7 int get_result(int n)
 8 {
 9         int result = 0;
10         if(n < 2)
11                 result = 0;
12         else{
13                 while(floor(n / 3) > 0)
14                 {
15                         result = result + floor ( n / 3 );
16                         n = floor ( n / 3 ) + ( n % 3);
17                 }
18         }
19         if ( n % 3 == 2)
20                 result ++ ;
21         return result;
22 }
23
24 int main(){
25         int result = 0;
26         int i = 0;
27         int n = 0;
28         while (cin >> n)
29         {
30                 if( n <= 0)
31                         break;
32                 else{
33                     result = get_result(n);
34                     cout << result << endl;
35                 }
36                 //int result = 0 ;
37                 //result = get_result(n);
38                 //cout << result << endl;
39         }
40
41 //      cout << i << endl;
42         return 0;
43 }

大神解法:(来源:牛客网)

 1 #include<stdio.h>
 2
 3 int main (){
 4
 5     int m;
 6
 7     while(~scanf("%d",&m)&&m!=0) printf("%d\n",m/2);
 8
 9     return 0;
10
11 }

原文地址:https://www.cnblogs.com/lijiaxin/p/10658187.html

时间: 2024-11-06 07:33:57

华为往年笔试题【空瓶子换水喝】的相关文章

华为往年笔试题【去重和排序】【vertor二维数组,迭代器】

题目:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理). Input Param n               输入随机数的个数 inputArray      n个随机整数组成的

空瓶子换水问题

近期看到有个有趣的问题,我简称为"空瓶子换水"问题,这里分两种情况,一种是有空瓶子,直接换水问题:另一种是知道怎么用空瓶子换水,如果满足一定数量的人喝水,需要至少买多少瓶问题. 这里假设3个空瓶子可以换1瓶水,那么针对上面的两个问题,有如下解释. 1. 有空瓶子,直接换水 对于计算方法,我这里提供两种, 第一种是比较笨拙的方法,假设有100个空瓶子,那个第一次换的为50,然后喝完再换,知道不能继续换为止.那么结果为:33+11+4+1=49: 第二种是,有M个空瓶子,N个瓶子可以换一瓶

华为 2015 笔试题练习

1.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'}

2015年校招--华为上机笔试题--大数相乘

#include "stdafx.h" #include<string> #include<iostream> using namespace std; void add(string &sum,string temp) { int len1=sum.size(); int len2=temp.size(); int jw=0; int i,j; for(i=len1-1,j=len2-1;i>=0 && j>=0;i--,j

2015年校招--华为上机笔试题--去重复单词

#include "stdafx.h" #include<set> #include<string> #include<iostream> using namespace std; int main() { set<string> s; char buf[1000]={0}; gets(buf); char* p=buf; while(*p!=0) { if(*p==',' || *p=='.') { *p=' '; } p++; } p

传说中的华为Python笔试题——两等长整数序列互换元素,序列和的差值最小(修正)

有两个序列a,b,大小都为n,序列元素的值任意整形数,无序:要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小. 1. 将两序列合并为一个序列,并排序,得到sourceList2. 拿出最大元素Big,次大的元素Small3. 在余下的序列S[:-2]进行平分,得到序列max,min4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min. 如下,提供递归版本和迭代版本的解体思路: #!/usr/bin/env py

华为算法笔试题

#include <vector> #include <iostream> using namespace std; int main() { int k; cin>>k; vector<vector<int> > arr; vector<int> a; int tmp; while(cin>>tmp){ int i=0; if(arr.size()<i+1) arr.push_back(a); arr[i].pus

华为C语言笔试题集合

①华为笔试题搜集 1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.    2) 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用函数訪问,但不能被模块外其他函数訪问.它是一个本地的全局变量.    3) 在模块内,一个被声明为静态的函数仅仅可被这一模块内的其他函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么差别?    1) 引用必须被初始化,指针不必.    2)

2014华为实习上级笔试题——三天打鱼两天晒网

#include<iostream> using namespace std; int func(int year)//判断闰年的个数 { int count=0; for(int i=1990;i<year;i++) if(year%4==0&&year%100!=0||year%400==0) count++; return count; } int main() { int year,month,day; int count,sum,num; //!!!!!!!!!