zoukankan      html  css  js  c++  java
  • 找零钱

    链接:http://www.nowcoder.com/pat/6/problem/4063

    题目描述

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二

    十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱P和他实付的钱A,你的任务是写一个程序来计算他应该被找的零钱。

    输入描述:

    输入在1行中分别给出P和A,格式为“Galleon.Sickle.Knut”,其间用1个空格分隔。这里Galleon是[0, 107]]区间内的整数,Sickle是[0, 

    17)区间内的整数,Knut是[0, 29)区间内的整数。



    输出描述:

    在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。

    输入例子:

    10.16.27 14.1.28

    输出例子:

    3.2.1

    思路:先把对应单位的值相减,分别得到每种单位的货币差多少(或者多多少),然后判断当前最大单位的货币的数量是正还是负。如果是负,那么就钱不够,就把所有为正的货币数修改为负。
    14.1.28(应付的钱)
    10.16.27 (拥有的钱)   差为:-4.15.-1 但是答案为:-3.2.1,-表示钱不够。将-4改为-3,那么去掉的那个‘-1’的加隆就要加到15西可上,‘-1’对应的又是-17个西可,所以就是
    -3.-2.-1。一个负号-表示差,还差3.2.1个货币。
      1 #include "iostream"
      2 #include <iomanip>
      3 #include <string.h>
      4 #include <string>
      5 #include <vector>
      6 #include <cmath>
      7 #include <cctype>
      8 #include <algorithm>
      9 using namespace std;
     10  20 void change(string s, int *arr)
     21 {
     22     int i=0, k=0, value;
     23     memset(arr, 0, sizeof(arr));
     24     value = 0;
     25     while(s[i] != '.')
     26     {
     27         value = value*10+s[i++]-'0';
     28     }
     29     arr[k++] = value;
     30     ++i;
     31     value = 0;
     32     while(s[i] != '.')
     33     {
     34         value = value*10+s[i++]-'0';
     35     }
     36     arr[k++] = value;
     37     ++i;
     38     value = 0;
     39     while(i < s.length())
     40     {
     41         value = value*10+s[i++]-'0';
     42     }
     43     arr[k] = value;
     44 }
     45 int main()
     46 {
     47     string s1, s2;
     48     cin >>s1 >>s2;
     49     int price[3];
     50     int money[3];
     51     int res[3];
     52     change(s1, price);
     53     change(s2, money);
     54     int total = 0;
     55     total += (money[0]-price[0])*17*29;
     56     total += (money[1]-price[1])*29;
     57     total += (money[2]-price[2]);
     58     res[2] = total%29;
     59     total /= 29;
     60     res[1] = total%17;
     61     total /= 17;
     62     res[0] = total;
     63     if(res[0] > 0)
     64     {
     65         if(res[1] < 0)
     66         {
     67             --res[0];
     68             res[1] += 17;
     69         }
     70         if(res[2] < 0)
     71         {
     72             --res[1];
     73             res[2] += 29;
     74         }
     75     }
     76     if(res[0] < 0)
     77     {
     78         if(res[1] > 0)
     79         {
     80             ++res[0];
     81             res[1] -= 17;
     82         }
     83         if(res[2] > 0)
     84         {
     85             ++res[1];
     86             res[2] -= 29;
     87         }
     88     }
     89     if(res[0] == 0)
     90     {
     91         if(res[1] > 0)
     92         {
     93             if(res[2] < 0)
     94             {
     95                 --res[1];
     96                 res[2] += 29;
     97             }
     98         }
     99         if(res[1] < 0)
    100         {
    101             if(res[2] > 0)
    102             {
    103                 ++res[1];
    104                 res[2] -= 29;
    105             }
    106         }
    107     }
    108     if(res[0]<0 || res[1]<0 || res[2]<0)
    109     {
    110         cout <<'-' <<-res[0] <<'.' <<-res[1] <<'.' <<-res[2] <<endl;
    111     }
    112     else
    113     {
    114         cout <<res[0] <<'.' <<res[1] <<'.' <<res[2] <<endl;
    115     }
    116     return 0;
    117 }
  • 相关阅读:
    HDU 2433 Travel (最短路,BFS,变形)
    HDU 2544 最短路 (最短路,spfa)
    HDU 2063 过山车 (最大匹配,匈牙利算法)
    HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)
    290 Word Pattern 单词模式
    289 Game of Life 生命的游戏
    287 Find the Duplicate Number 寻找重复数
    283 Move Zeroes 移动零
    282 Expression Add Operators 给表达式添加运算符
    279 Perfect Squares 完美平方数
  • 原文地址:https://www.cnblogs.com/mtc-dyc/p/4630711.html
Copyright © 2011-2022 走看看