為什么這段代碼無法AC?是我對題意理解有誤?還是代碼有漏洞??
當(dāng)我們驗(yàn)證卡拉茲猜想的時(shí)候,為了避免重復(fù)計(jì)算,可以記錄下遞推過程中遇到的每一個(gè)數(shù)。例如對n=3進(jìn)行驗(yàn)證的時(shí)候,我們需要計(jì)算3、5、8、4、2、1,則當(dāng)我們對n=5、8、4、2進(jìn)行驗(yàn)證的時(shí)候,就可以直接判定卡拉茲猜想的真?zhèn)危恍枰貜?fù)計(jì)算,因?yàn)檫@4個(gè)數(shù)已經(jīng)在驗(yàn)證3的時(shí)候遇到過了,我們稱5、8、4、2是被3“覆蓋”的數(shù)。我們稱一個(gè)數(shù)列中的某個(gè)數(shù)n為“關(guān)鍵數(shù)”,如果n不能被數(shù)列中的其他數(shù)字所覆蓋。
現(xiàn)在給定一系列待驗(yàn)證的數(shù)字,我們只需要驗(yàn)證其中的幾個(gè)關(guān)鍵數(shù),就可以不必再重復(fù)驗(yàn)證余下的數(shù)字。你的任務(wù)就是找出這些關(guān)鍵數(shù)字,并按從大到小的順序輸出它們。
輸入格式:每個(gè)測試輸入包含1個(gè)測試用例,第1行給出一個(gè)正整數(shù)K(<100),第2行給出K個(gè)互不相同的待驗(yàn)證的正整數(shù)n(1<n<=100)的值,數(shù)字間用空格隔開。
輸出格式:每個(gè)測試用例的輸出占一行,按從大到小的順序輸出關(guān)鍵數(shù)字。數(shù)字間用1個(gè)空格隔開,但一行中最后一個(gè)數(shù)字后沒有空格。
輸入樣例:
6
3 5 6 7 8 11
輸出樣例:
7 6
代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n; int *a; int t; int p = 0; int i = 0, j = 0; scanf("%d", &n); a = (int*)calloc(n, sizeof(int)); while(n != i){ scanf("%d", &a[i++]); } for( j = 0; j < n - 1; j++) for(i = 0; i < n - 1 - j; i++) if(a[i] < a[i + 1]) t = a[i],a[i] = a[i +1], a<愛尬聊_尬聊生活>[i + 1] = t;for(i = 0; i < n; i++){ p = a[i]; while(p > 1){ if(p % 2 == 0){ p = p / 2; } else{ p = p * 3 + 1; } for(j = 0; j < n; j++){ if( p == a[j]) a[j] = 0;} }
}
i = 0;
while(i != n){
if(a[i] != 0) printf("%d ", a[i]); i++;
}
printf("(此處應(yīng)有反斜杠但未顯示)b");
free(a);
return 0;
}