2014-04-07 62 views
-1

注意:請不要爲此問題編寫解決方案(即算法邏輯)。如何獲取非空格分隔的n數字輸入

昨天廚師舉辦了一個很棒的派對,不記得他如何慶祝它的方式。但是他在他的廚房裏發現了一張奇怪的紙,裏面有n個數字(讓他們給出從1到n的索引,並將它們命名爲a1,a2 ... aN)。

廚師記得他打出這樣的比賽:

On each step he choose an index x from 1 to n. 
For all indices y (y < x) he calculated the difference by = ax - ay. 
Then he calculated B1 - sum of all by which are greater than 0 and B2 - sum of all by which are less than 0. 
The answer for this step is B1 - B2. 

廚師回憶的比賽,卻忘了答案。請幫助他! 輸入

The first line contains two integers n, m denoting the number of digits and number of steps. The second line contains n digits (without spaces) a1, a2, ..., an. 
Each of next m lines contains single integer x denoting the index for current step. 

輸出

For each of m steps print single number in a line - answer of the step. 

約束

1 ≤ n, m ≤ 10^5 
0 ≤ ai ≤ 9 
1 ≤ x ≤ n 

現在我該怎樣取n輸入數字?我的意思是我如何使用scanf函數代碼this.i dont5確切知道n的值,所以我不能聲明那些變量。是否意味着我只輸入一個數字?

+2

爲什麼很長很長,*完全不相干的故事*?只有你的最後一段(**有幫助地完全用粗體,看看這是多麼惱人的**)是相關的,並且是一個公平的問題。 – usr2564301

+0

不知道這一切意味着什麼,但我得到了OP懷疑我下調的獨特想法。請閱讀[聲譽系統如何運作](http://meta.stackexchange.com/questions/7237/how-does-reputation-work)。另請閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)。最後,OP的狀態表明沒有閱讀[關於Stackoverflow](http://stackoverflow.com/about),這是一個友好的網站介紹。 – usr2564301

回答

3

每次只得到一個字符:

int num = getc(stdin) - '0'; 

「0」減法是把一個字符爲數字。顯然,錯誤檢查是作爲一個練習。

0

(假設Ñ數字輸入是一個字符串,其中n個字符)使用動態存儲器分配和定製scanf格式化:

int n = 0; 
char* digits = NULL; 
char format[256]; 

printf("n="); 
scanf("%d", &n); 
digits = calloc(n + 1, 1); /* for the terminator 0 to be initialized*/ 

snprintf(format, 256, "%%%ds", n); /* to not to cause an overflow */ 

if(NULL == digits) 
{ 
    printf("Not enough memory"); 
    exit(1); 
} 
scanf(format, digits); 
printf("%s", digits); 

// DO your algorithm here 

free(digits); 
0

@ user3424954讀問題陳述再次可以清楚地提及第一行輸入n的是數字串的長度。 您可以嘗試使用 * scanf函數( 「%S」,ARRAY_NAME); *

相關問題