【问题标题】:What can I do to basically "combine" these for-loops?我能做些什么来基本上“组合”这些 for 循环?
【发布时间】:2021-08-04 01:28:51
【问题描述】:

您好,我是 C 和一般编程的新手,但听说如果可能,不应重复代码,这很有意义,但我不知道如何减少此代码的重复性。任何意见将不胜感激。

int main(void)
{
    float dollars = 0;
    float real_value = 0; 
    int cents = 0;
    int coin_counter = 0;
    do
    {
        dollars = get_float("change owed: ");
        cents = round(dollars*100);   
    }
    while(dollars<0);

如果可能的话,我希望这四个 for 循环可以合二为一?

     for(int i = 0; cents>=25; i++)
     {
         cents = cents - 25;
         real_value = cents;
         coin_counter++;
     }
     for (int i = 0; cents>=10; i++)
     {
         cents = cents - 10;
         real_value = cents;
         coin_counter++;
     }
     for (int i = 0; cents >= 5; i++)
     {
         cents = cents - 5;
         real_value = cents;
         coin_counter++;
     }
     for (int i = 0; cents >= 1; i++)
     {
         cents = cents - 1;
         real_value = cents;
         coin_counter++;
     }
    printf("coins: %i\n",coin_counter);
    printf("leftovers: %f\n", real_value);
}
    

【问题讨论】:

    标签: c for-loop optimization


    【解决方案1】:

    您需要做的就是使 for 循环的条件依赖于某个变量。

    例如

    int nominal_value[] = { 25, 10, 5, 1 };
    const size_t N = sizeof( nominal_value ) / sizeof( *nominal_value );
    
    for ( size_t i = 0; i < N; i++ )
    { 
        for(int i = 0; cents>=nominal_value[i]; i++)
         {
             cents = cents - nominal_value[i];
             real_value = cents;
             coin_counter++;
         }
    }
    

    注意好像是这样的说法

    real_value = cents;
    

    没有意义。也许应该改变内循环的主体。例如,这条语句可以放在内循环之后,甚至可以放在外循环之后。

    【讨论】:

    • 打败我。我也会将real_value = cents; 移到循环之外
    • 好吧,小虫子:有一个25,必须替换为nominal_value[i]
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多