zoukankan      html  css  js  c++  java
  • HDU2021 发工资咯:)

    问题链接HDU2021 发工资咯:)入门训练题,用C语言编写程序。

    问题简述参见上述链接。

    问题分析有点像贪心算法的地方,实际上要简单很多。尽可能用大面值币种发工资是常识。用贪心算法来做则需要先将币值从大到小排序,由于币值数组是人为设定的,就省去排序了。

    对于每一个工资值,用币值从大到小处就是需要的张数。看着程序应该是可以理解的。

    其他的就是数据输入格式,数据输出格式,程序书写格式的问题,相对都简单了。

    程序说明把程序写的具有通用性,是需要一些技巧的,使用数组来存放币值也应该算是一种。如果货币的面值发生变化,这个程序只需要修改币值数组bill[]即可,不需要修改程序逻辑,可以说通用性非常强。这依赖于变量billcount初始值能够自动算出该数组元素的个数。

    使用什么样的数据结构来存储数据,多多少少会一定程度影响程序的逻辑,需要注意的是简洁为佳。

    用循环处理,程序逻辑要简单一些。

    AC的C语言程序如下:

    /* HDU2021 发工资咯:) */
    
    #include <stdio.h>
    
    int main(void)
    {
        int bill[] = {100, 50, 10, 5, 2, 1};
        int billcount = sizeof(bill) / sizeof(int);
        int n, count, val, i, j;
    
        while(scanf("%d", &n) != EOF) {
            // 判断结束条件
            if(n == 0)
                break;
    
            // 张数清零
            count = 0;
    
            // 读入工资进行处理
            for(i=1; i<=n; i++) {
                scanf("%d", &val);
    
                for(j=0; j<billcount; j++) {
                    if(val == 0)
                        break;
                    count += val / bill[j];
                    val %= bill[j];
                }
            }
    
            // 输出结果
            printf("%d
    ", count);
        }
    
        return 0;
    }


  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564668.html
Copyright © 2011-2022 走看看