#32417: C語言一個月新手求解


cyt0516@outlook.com (陰天)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 204463
來源 : [124.219.6.236]
最後登入時間 :
2023-08-22 11:43:31
a249. 00679 - Dropping Balls -- UVa679 | From: [114.34.142.166] | 發表日期 : 2022-10-08 21:45

這是我的程式

#include <stdio.h>

#include <math.h>

int main() {

 int times, D, I, num, final;

 scanf("%d", &times);

 for (int i = 0;i < times;i++) {

  num = 0;

  scanf("%d%d", &D, &I);

  for (int j = D - 2;j >= 0;j--) {

   if (I % 2 == 1) {

    I = (I + 1) / 2;

   }

   else {

    I /= 2;

    num += pow(2, j);

   }

  }

  final = num + pow(2, D - 1);

  printf("%d\n", final);

 }

 return 0;

}

在自己的VS跟測試執行都沒問題,但到了實際測資會RE(SIGKILL),不知道為什麼,希望有人可以幫我解答

 
#32419: Re: C語言一個月新手求解


cyt0516@outlook.com (陰天)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 204463
來源 : [124.219.6.236]
最後登入時間 :
2023-08-22 11:43:31
a249. 00679 - Dropping Balls -- UVa679 | From: [114.34.142.166] | 發表日期 : 2022-10-09 07:55

我換一種寫法就解開了,所以我不用幫助了,但還是感謝有幫我看的人。

以下是我改良後的解法:

#include <stdio.h>
int main() {
	int times, D, I, num;
	scanf("%d", &times);
	for (int i = 0;i < times;i++) {
		scanf("%d%d", &D, &I);
		num = 0;
		for (int j = D - 2;j >= 0;j -= 1) {
			if (I % 2 == 1) {
				I = (I + 1) / 2;
			}
			else {
				I /= 2;
				num += 1 << j;
			}
		}
		printf("%d\n", (num + (1 << D - 1)));
	}
}
 
ZeroJudge Forum