鱼C论坛

 找回密码
 立即注册
查看: 927|回复: 5

[已解决]C++/硬币找零/贪心算法/代码优化

[复制链接]
发表于 2022-3-26 15:01:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 灰灰会画画 于 2022-3-26 15:06 编辑

一道C++的题目,想问问大佬们我的代码如何优化一下,看起来更简洁一点,谢谢~
硬币找零.png

我的代码:

#include<iostream>
using namespace std;
int main()
{
        int m,q=0,d=0,n=0,c=0;
        cin>>m;
        while (m>0){
                if(m>=25){
                        q+=1;
                        m-=25;
                        continue;
                }
                if(m>=10){
                        d+=1;
                        m-=10;
                        continue;
                }
                if(m>=5){
                        n+=1;
                        m-=5;
                        continue;
                }
                if(m>=1){
                        c+=1;
                        m-=1;
                }
        }
        cout<<"Change: ";
  if(q>1) cout<<q<<" Quarters, ";
  else cout<<q<<" Quarter, ";
  if(d>1) cout<<d<<" Dimes, ";
  else cout<<d<<" Dime, ";
  if(n>1) cout<<n<<" Nickels, ";
  else cout<<n<<" Nickel, ";
  if(c>1) cout<<c<<" Cents, ";
  else cout<<c<<" Cent";
}

最佳答案
2022-3-26 15:17:08
本帖最后由 傻眼貓咪 于 2022-3-26 15:23 编辑

#include <iostream>
using std::cout, std::cin;

int main(){
        short n, t;
        cin >> n;
        cout << "change: ";
        n/25 > 1 ?
        cout << n/25 <<  " Quarters, ":
        cout << n/25 << "Quarter, ";
        n %= 25;
        n/10 > 1 ?
        cout << n/10 << " Dimes, ":
        cout << n/10 << " Dime, ";
        n %= 10;
        n/5 > 1 ?
        cout << n/5 << " Nickels, ":
        cout << n/5 << " Nickel, ";
        n %= 5;
        n > 1 ?
        cout << n << " Cents":
        cout << n << " Cent";
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-26 15:17:08 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2022-3-26 15:23 编辑

#include <iostream>
using std::cout, std::cin;

int main(){
        short n, t;
        cin >> n;
        cout << "change: ";
        n/25 > 1 ?
        cout << n/25 <<  " Quarters, ":
        cout << n/25 << "Quarter, ";
        n %= 25;
        n/10 > 1 ?
        cout << n/10 << " Dimes, ":
        cout << n/10 << " Dime, ";
        n %= 10;
        n/5 > 1 ?
        cout << n/5 << " Nickels, ":
        cout << n/5 << " Nickel, ";
        n %= 5;
        n > 1 ?
        cout << n << " Cents":
        cout << n << " Cent";
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-26 15:50:50 | 显示全部楼层

谢谢你的回答~请问代码第8行 n/25 > 1 ? ,是C++中的什么用法,还有short n,t中,变量t是起到什么作用呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-26 15:58:45 | 显示全部楼层
#include <iostream>
#include <utility>

int main()
{
    std::pair<int, std::string> money[4] = {{25, "Quarter"}, {10, "Dime"}, {5, "Nickel"}, {1, "Cent"}};
    short n;
    std::cin >> n;
    std::cout << "change: ";
    for(std::pair<int, std::string> &m: money){
        if(n/m.first > 1) m.second += "s";
        if (m.first != 1) m.second += ", ";
        cout << n/m.first << " " << m.second;
        n %= m.first;
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-26 16:04:07 | 显示全部楼层
灰灰会画画 发表于 2022-3-26 15:50
谢谢你的回答~请问代码第8行 n/25 > 1 ? ,是C++中的什么用法,还有short n,t中,变量t是起到什么作用呀

第8行 n/25 > 1 ? 是三元运算符,比如:

条件 A ? 代码 X : 代码 Y
如果条件 A 成立(true)则运行代码 X,否则运行代码 Y

short 如同 int float double char 等等,是整数类型,因为你的题目最大值是 100 而已,所以用 short,当然你也可以用 int

变量 t 没有任何作用(纯粹是我忘记删除了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-26 16:20:30 | 显示全部楼层
傻眼貓咪 发表于 2022-3-26 16:04
第8行 n/25 > 1 ? 是三元运算符,比如:

条件 A ? 代码 X : 代码 Y

好的,明白了,非常感谢你的讲解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表