去哪儿2018校招测试工程师笔试题。
发布于 2017-09-26 09:15 2716 次浏览 0 赞 来自 试题交流  

日本旅行

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

楚乔、宇文玥和燕洵在日本旅行,经过了几天的游玩之后,钱包里出现了大量硬币,楚乔决定用钱包里的硬币为宇文玥和燕洵在自动贩卖机买水。楚乔的钱包里有1元、5元、10元、50元、100元和500元硬币各C1,C5,C10,C50,C100,C500枚。现在要用这些硬币来到自动贩卖机买价格为A的饮料,假设自动贩卖机所需的硬币金额必须是刚刚好,不能多也不能少,最少需要多少枚硬币?

限制条件

0<= C1,C5,C10,C50,C100,C500<=1000000000

0<=A<=1000000000

依次输入 C1,C5,C10,C50,C100,C500和A,以空格分隔,输出最少所需硬币数,如果该金额不能由所给硬币凑出,则返回NOWAY


输入

依次输入 C1,C5,C10,C50,C100,C500和A,以空格分隔

样例输入

3 2 1 3 0 2 620

<div class="outputarea yangli ng-scope" style='box-sizing: border-box; margin: 0px; padding: 0px; font-family: "Microsoft Yahei";' ng-if="model.ques.questype==6 && model.ques.outputSample != null && model.ques.outputSample!=''" "="">

样例输出

6


7 条回复

25% 怎么办

2017-09-26 10:23
coder_6TR5HJN2 回复 coder_UDHMTDE8

我看看代码 我40% = =

2017-09-26 10:28 2

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

long A;

long[] a=new long[6];

int[] b={1,5,10,50,100,500};

for(int i=0;i<6;i++){

a[i]=in.nextLong();

if(a[i]<0||a[i]>1000000000){

return;

}

}

A=in.nextLong();

if(A<0||A>1000000000){

return;

}

int count=0;

int temp=0;

for(int i=5;i>=0;i--){

if(A>=b[i]){

temp=(int) A/b[i];

if(a[i]<temp){

temp=(int) a[i];

}

count+=temp;

A=A-b[i]*temp;

}

}

if(A!=0){

System.out.println("NOWAY");

}else{

System.out.println(count);

}

}

}


2017-09-26 10:33
1

唯一全对的一道题

# include <stdio.h>  

# include <iostream>  

# include <algorithm>  

using namespace std;  

int v[6]={1,5,10,50,100,500};  

void solve(int A ,int *num)  

{  

    int count = 0;

    for(int i=5;i>=0;i--)  

    {  

        int t=min(A/v[i],num[i]);   

        A-=t*v[i];  

        count+=t;  

    }  

    if(A == 0)

   cout<<count<<endl;  

else{

    cout<<"NOWAY";

    }

}  

int main()  

{  

    int num[6];

    int A;

    while(true)  

    {  

        for(int i=0;i<6;i++)  

            cin>>num[i];  

        cin>>A;  

        solve(A,num);  

    }  

    return 0;  

}  



2017-09-26 10:51

瞎写了一个贪心,还AC了

2017-09-26 10:59

由大到小贪心就可以了吧

2017-09-26 11:06
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] c = new int[6];
		for(int i=0; i<6; i++) {
			c[i] = sc.nextInt();
		}
		int A = sc.nextInt();
		sc.close();
		 
		int[] type = {1, 5, 10, 50, 100, 500};
		int count = 0;
		
		for(int i=5; i>=0; i--) {
			while(c[i] != 0 && A/type[i] != 0) {
				A -= type[i];
				c[i]--;
				count++;
			}
		}
			 
		if(A != 0) {
			System.out.println("NOWAY");
		} else {
			System.out.println(count);
		}
	}

}


唉,就做对这个,第二题都没做,第三题在本地测试了不少用例,都是对的,但是只能通过20%

2017-09-26 11:09
添加回复
回到顶部