可以利用1+3+5+7+…+第N個奇數=N^2的公式來解,所以當要得知[a,b]之間的奇數和的話,在輸入的a或b並非奇數的情況下(測資裡似乎有a或b是偶數的情形),a要重新代入[a,b]裡面最小的奇數,b要重新代入[a,b]裡面最大的奇數,接著只要將a+(a+2)+(a+4)+…+b改寫成(1+3+5+…+b)-(1+3+5+…+(a-2))=((b+1)/2)^2 – ((a-1)/2)^2就可不用迴圈換用一個公式得解!
C++(0.008)
/*******************************************************/
/* UVa 10783 Odd Sum */
/* Author: Maplewing [at] knightzone.studio */
/* Version: 2012/01/17 */
/*******************************************************/
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int T;
int a, b;
while( scanf( "%d", &T ) != EOF ){
for( int i = 1 ; i <= T ; i++ ){
scanf( "%d%d", &a, &b );
if( !(a % 2) ) a++;
if( !(b % 2) ) b--;
printf( "Case %d: %d\n", i, (b+1)/2*(b+1)/2 - (a-1)/2*(a-1)/2 );
}
}
return 0;
}
excellent