用纯数学模型解决兑换钱币问题

描述
对于给定的人民币金额n(分),问有多少种方案将其兑换成1分、2分、5分。

输入
输入数据有若干行。每行上有一个正整数表示以分为单位的人民币金额n,对应一种情形。

输出
对于每一种情形,先输出“Case #:”(#为序号,从1起),然后输出n,逗号,结果,换行。
用switch函数分类余数情况
样例输入1
10
100
150
样例输出1
Case 1: 10, 10
Case 2: 100, 541
Case 3: 150, 1186
下为自己编的代码(显示wrong answer)
求各路巨神帮忙解惑指正!

#include <iostream>
using namespace std;
int main(){
    int n,k=0;
    while(cin>>n){
        cout<<"Case "<<++k<<": "<<n<<", ";
        int sum,i;
        i=n/5;
        switch(n%5){
            case 4: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+8*(i/2)+3;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+13*(i/2)+8;
                    } 
            case 3: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+7*(i/2)+2;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+12*(i/2)+7;
                    }
            case 2: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+6*(i/2)+2;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+11*(i/2)+6;
                    }
            case 1: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+5*(i/2)+1;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+10*(i/2)+5;
                    }
            case 0:if(i%2==0){
                        sum = 5*(i/2)*(i/2)+4*(i/2)+1;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+9*(i/2)+4;
                    }
        }
        cout<<sum<<endl;
        getchar();
    }
    return 0;
}

你确定不同case间不需要break么,不break的话是会全执行一遍的
你先输入示例输入输出看一下结果正不正确吧

过判题系统了

#include <iostream>
using namespace std;
int main(){
    int n,k=0;
    while(cin>>n){
        cout<<"Case "<<++k<<": "<<n<<", ";
        int sum,i;
        i=n/5;
        if(n==0){
            cout<<0;
            break;
        }
        switch(n%5){
            case 4: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+8*(i/2)+3;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+13*(i/2)+8;
                    } 
                    break;
            case 3: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+7*(i/2)+2;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+12*(i/2)+7;
                    }
                    break;
            case 2: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+6*(i/2)+2;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+11*(i/2)+6;
                    }
                    break;
            case 1: if(i%2==0){
                        sum = 5*(i/2)*(i/2)+5*(i/2)+1;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+10*(i/2)+5;
                    }
                    break;
            case 0:if(i%2==0){
                        sum = 5*(i/2)*(i/2)+4*(i/2)+1;
                    }
                    else{
                        sum = 5*(i/2)*(i/2)+9*(i/2)+4;
                    }
                    break;
        }
        cout<<sum<<endl;
        getchar();
    }
    return 0;
}

学会了,感谢大佬,看了这个代码我直接在学校跪下泪流满面滚来滚去,感谢大佬感谢大佬,没有大佬的代码我真的以为这个题目系统只能输出wrong answer或者complie fail,呜呼哀哉我原地乐得飞起。