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

一道C++的题目,请问如何优化这个代码,看着更简洁一点,谢谢~

题目如下:

img

这是我的代码:

#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";
}

用数组记录数量,以及用数组存储25,10,5,1,这样用循环

#include <iostream>
using namespace std;
#define N 4
int main()
{
    char unitname[N][20] = {"Quarters","Dimes","Nickel","Cents"};
    int unit[N] = {25,10,5,1};
    int num[N] = {0};
    int i=0,n;
    cin>>n;
    for(i=0;i<N;i++)
    {
        num[i] = n/unit[i];
        n = n%unit[i];
    }
    cout<<"Change: ";
    for(i=0;i<N;i++)
    {
        if(i!=0)
            cout<<", ";
        cout<<num[i]<<" "<<unitname[i];
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    printf("Change: %d Quarters, %d Dimes, %d Nickel,  %d Cents",n/25,n%25/10,(n%25%10)/5,n%25%10%5);
    return 0;    
}

```