灰灰会画画 发表于 2022-3-26 15:01:10

C++/硬币找零/贪心算法/代码优化

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

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


我的代码:
#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;
}

灰灰会画画 发表于 2022-3-26 15:50:50

傻眼貓咪 发表于 2022-3-26 15:17


谢谢你的回答~请问代码第8行 n/25 > 1 ? ,是C++中的什么用法,还有short n,t中,变量t是起到什么作用呀

傻眼貓咪 发表于 2022-3-26 15:58:45

#include <iostream>
#include <utility>

int main()
{
    std::pair<int, std::string> money = {{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;
}

傻眼貓咪 发表于 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 没有任何作用(纯粹是我忘记删除了)

灰灰会画画 发表于 2022-3-26 16:20:30

傻眼貓咪 发表于 2022-3-26 16:04
第8行 n/25 > 1 ? 是三元运算符,比如:

条件 A ? 代码 X : 代码 Y


好的,明白了,非常感谢你的讲解!
页: [1]
查看完整版本: C++/硬币找零/贪心算法/代码优化