### 北大青鸟S1上机三第三部分第二题(C#):纸币计算 #### 背景介绍 本题目属于北大青鸟S1上机考试的一部分,主要考察学生对于C#语言的基本掌握情况以及算法思维能力。题目要求根据用户输入的金额,计算出最少需要多少张不同面值的纸币来组成该金额,并具体给出每种面值的纸币数量。 #### 题目解析与实现 ##### 题目要求 - 输入:用户任意输入一个金额。 - 输出:最少需要多少张纸币,并列出每种面值(100、50、20、10、5、1元)的纸币数量。 ##### 实现思路 为了得到最少的纸币数量,可以采用贪心算法的思想,即优先选择面值最大的纸币进行组合。具体步骤如下: 1. **初始化变量**:定义用于存储总纸币数量的变量 `sum` 和用于存储每种面值纸币数量的数组 `myarr`。 2. **计算每种面值纸币的数量**:从最大面值开始计算,依次为100元、50元、20元、10元、5元、1元。每次计算时,先用当前金额除以当前面值,得到该面值纸币的数量,然后用余数更新剩余金额。 3. **输出结果**:输出最少需要的纸币总数及每种面值纸币的数量。 ##### 代码解析 ```csharp using System; namespace hi { class Program { static void Main(string[] args) { int money; // 用户输入的金额 int sum; // 总纸币数量 Console.WriteLine("请输入金额:"); money = int.Parse(Console.ReadLine()); int[] myarr = CalculatMoney(money); // 计算纸币数量 // 输出总纸币数量 sum = myarr[0]; Console.WriteLine("{0}元需要{1}张纸币", money, sum); // 输出每种面值纸币的数量 Console.WriteLine("分别需要 {0} 张100元,{1} 张50元,{2} 张20元,{3} 张10元,{4} 张5元,{5} 张1元", myarr[1], myarr[2], myarr[3], myarr[4], myarr[5], myarr[6]); Console.ReadLine(); } private static int[] CalculatMoney(int money) { int bai; // 100元纸币数量 int wushi; // 50元纸币数量 int ershi; // 20元纸币数量 int shi; // 10元纸币数量 int wu; // 5元纸币数量 int yi; // 1元纸币数量 int sum = 0; // 总纸币数量 // 计算每种面值纸币的数量 bai = money / 100; // 100元纸币数量 sum += bai; // 更新总纸币数量 money %= 100; // 更新剩余金额 wushi = money / 50; // 50元纸币数量 sum += wushi; // 更新总纸币数量 money %= 50; // 更新剩余金额 ershi = money / 20; // 20元纸币数量 sum += ershi; // 更新总纸币数量 money %= 20; // 更新剩余金额 shi = money / 10; // 10元纸币数量 sum += shi; // 更新总纸币数量 money %= 10; // 更新剩余金额 wu = money / 5; // 5元纸币数量 sum += wu; // 更新总纸币数量 money %= 5; // 更新剩余金额 yi = money / 1; // 1元纸币数量 sum += yi; // 更新总纸币数量 money %= 1; // 更新剩余金额 // 返回结果 return new int[] { sum, bai, wushi, ershi, shi, wu, yi }; } } } ``` ##### 注意事项 1. **输入验证**:在实际应用中,应对用户输入的数据进行有效性验证,确保其为正整数。 2. **异常处理**:增加异常处理机制,防止因非法输入导致程序崩溃。 3. **代码优化**:可以通过函数重写或循环结构进一步优化代码结构,提高代码复用性和可读性。 通过以上分析,我们可以看出此题目的实现不仅考察了学生对C#语言基本语法的理解,还涉及到了基础的算法思想和编程实践技巧。
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hi
{
class Program
{
static void Main(string[] args)
{
int money;
int sum;//总纸张数
Console.WriteLine("请输入金额:");
money = int.Parse(Console.ReadLine());
int[] myarr=CalculatMoney(money);
//通过数组myarr来接收计算之后的各个变量值;
sum = myarr[0];
Console.WriteLine("组成{0},需要{1}张纸币",money,sum);
Console.WriteLine("共需要{0}张一百的,{1}张五十的,{2}张二十的,{3}张十块的,{4}张五块的,{5}张一块的",
myarr[1],myarr[2],myarr[3],myarr[4],myarr[5],myarr[6]);
Console.ReadLine();
}
private static int[] CalculatMoney(int money)
{
int bai;
int wushi;
int ershi;
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助