#UVa:10783-Odd Sum

灆洢 2012-01-17 00:47:34

可以利用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;
}

在〈“#UVa:10783-Odd Sum”〉中有 1 則留言

  1. 7878表示:

    excellent

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料