簡體   English   中英

在涉及拋硬幣的編程問題上需要幫助

[英]Need help with this programming problem involving flipping coins

我試圖在codechef.com( http://www.codechef.com/problems/FLIPCOIN/ )上解決擲硬幣問題,我的代碼在C語言中,我在運行Linux的計算機上使用gcc v4.4.3對其進行了測試我的程序適用於提供的示例輸入。 但是,上傳到法官后,我收到消息“錯誤答案”。 在我的程序中,我通過位的翻轉來表示硬幣的翻轉。我認為我的算法是正確的,並且無法解決失敗的情況。 下面是我的代碼。 任何幫助將非常感激。

謝謝。

#include <stdio.h>

long int n=0,temp,number_of_coins,number_of_inputs,bit_mask;
long int number_of_ones(long int i) //Return the number of bits set
{
   return __builtin_popcountl(i);
}
int main(void)
{
    long int ctr,lower,upper,length;
    int op;

    scanf("%ld %ld",&number_of_coins,&number_of_inputs);
    length = number_of_coins-1;
    for(ctr = 0 ; ctr < number_of_inputs;ctr++) //Main loop
    {
        scanf("%d %ld %ld",&op,&lower,&upper);
        bit_mask = ((1 << length-lower+1)-1) & ~((1 << length-upper)-1);

        if(op == 0)
        {   

            n ^= bit_mask ; //Toggle the bits in the range lower to upper

        }
        else
        {
            temp = n;
            temp &= bit_mask;
            printf("%ld\n",number_of_ones(temp)); //Print number of bits set
        }


    }



    return 0;

}

由於您使用存儲在long int的位序列來表示硬幣,因此您的代碼最多只能使用32個硬幣(或者long中有很多位)。 該站點指定最多可以有100000個硬幣。

檢查結果的CodeChef方法可能存在問題,因為我也得到了相同的答案。 您的代碼沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM