一个公司笔试题:出去旅游,只有固定的钱,住不同的旅店,最少可以住多少

来源:互联网 发布:淘宝二手iphone店铺 编辑:程序博客网 时间:2024/06/10 07:35

输入n个int数,[0,n-2]表示n-1个酒店的每晚价格,第[n-1]个元素是你拥有的钱。
要求输出,能住最少的天数,且钱必须刚好花完。
若不存在匹配情况,则返回-1.

输入描述

输入为一行。

共n个整数,最后一个数是拥有的钱数。以空格分隔。

输出描述

输出能住的最小天数,不存在则输出-1。

输入例子

1001 1002 1003 1004 1000

输出例子
-1

一下是自己写的一个C程序,仅供参考学习。

#include<stdio.h>//要求,出去旅游,只有1000块,住旅店,最少可以住多少void bubble_sort(int a[], int n)//冒泡排序{int i, j, temp;    for (j = 0; j < n - 1; j++)        for (i = 0; i < n - 1 - j; i++)         if(a[i] > a[i + 1])            {temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;}}int p(int a[],int n){    int k=0,i;    if(a[0]>a[n-1])        //判断最小的值是否大于当前的钱数,如果大于,则返回-1        return -1;    else    {        for(i=n-2;i>=0;i--)//for循环用来依次从大到小的对比与剩下的钱数        {            if(a[n-1]<a[i])//判断当前的价格是否大于当前的钱数,如果大于当前的钱数,则跳出此次循环,进入下次循环                continue;            else            {                if(a[n-1]%a[i]==0)//如果不大于当前剩余的钱数,则判断是否可以干好把这个钱花完在当前的酒店                    return k+a[n-1]/a[i];//如果可以花完当前的酒店,那么返回当前的天数;                else//如果不能在当前的酒店刚好花完剩余的钱                {                    k+=(a[n-1]-a[n-1]%a[i])/a[i];//查看在当前酒店能够最多住几天,并且把天数加给k                    a[n-1]=a[n-1]%a[i];//除去花去的钱,赋值给当前的剩余的钱                }            }        }        if(a[n-1]!=0)//当所有的酒店都遍历完成后,如果还不能恰好花完所给的钱,则返回-1,说明不能恰好花完            return -1;        else            return k;//如果当前的钱恰好花完,则返回能够住的最小的天数    }}int main(){    int num;    int i=0,j;    int arr[10],k;   while(1){        //用来输入一行数据,用空格分开,以回车结束,前面的均为酒店价格,最后一个为当前所拥有的钱数        scanf("%d",&num);        char c=getchar();        arr[i++]=num;        if(c=='\n'){            break;        }   }   //printf("%d\n",i);//用来测试当前的输入的数据的个数   bubble_sort(arr,i-1);//对输入的前n-1个数进行排序   k=p(arr,i);//取得返回值   printf("%d\n",k);//输出得到的最小的能够住的天数   //for(j=0;j<i;j++){//用来测试能否完整的存储进去,循环输出输入的数据   // printf("%d\n",arr[j]);   //}  return 0;}


0 0
原创粉丝点击