アルゴリズムノート貪欲なアルゴリズムのタクシー料金

主題の要件

ここに写真の説明を挿入ここに写真の説明を挿入

アイデア

最初に3つの状況を分析しましょう

n 価格
n <= 4 10
4 <n <8 10 + 2 *(n-4)
n> = 8 18 + 2.4 *(n-8)

その中で、n> = 8の場合、

  • 8 <n <= 12
    方法1:価格= 18 + 2.4 *(n-8)//より適切な
    方法2:価格= 18 + 10
  • 12 <n <= 16
    方法1:価格= 18 + 4 * 2.4 + 2.4 *(n-12)
    方法2:価格= 18 + 10 + 2(n-12)//より適切

類推により、n> = 8の場合、最初に8の部分を計算し、残りの部分が8未満になるまでn-8を続けます。

  • 残りの部分が4より大きい場合は、12 <n <= 16と同様の方法を選択し、10 + 2(n-12)のアルゴリズムを使用します。
  • それ以外の場合は、8 <n <= 12、直接2.4 * nと同様の方法を使用します

コード

#include <stdio.h>

int main(){
    
    
    
    float n=0;
    while(scanf("%f",&n)&&n!=0){
    
    
        int in=(int)n;
        double rent=0;
        if(n-in!=0)
            in=in+1;
        if(n<=4)
            rent=10;
        else if(n>4&&n<=8)
            rent=10+(n-4)*2;
        else{
    
    
            while(n>=8){
    
    
                rent+=18;
                n-=8;
            }
            if(n<=4)
                rent+=2.4*n;
            else
                rent+=10+(n-4)*2;
        }
        //注意输出格式
        if(rent-(int)rent==0)   printf("%d\n",(int)rent);
        else    printf("%.1lf\n",rent);
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/Cindy_00/article/details/108522844