2012年1月11日 星期三

C acm10673 Play with Floor and Ceil

對任何2個整數 x 和 k,存在另2個整數 p 和 q 使得:

要證明上面的式子是一件相當容易的事,所以我們不會要求你去做。我們要你做的事甚至更容易一些。給你 x 和 k 的值,請你找出 p 和 q 使得上面的式子成立
對每組測試資料輸出一列,含2個整數 p 和 q 。假如存在不只一組答案,輸出任何一個都可以。

 [心得] 0.340

1. % (mod)只能用int ,所以變數宣告為double,運算時必須type casting 成int 型態
2. Solution
  
CASE:(整除) 
  中floor 和ceiling 相同(表示x/k可整除),
     ==> 等號兩邊同乘k
  ==> kx= px+qx;
     ==> k=p+q; (最簡單的方式,令p為0, k=q)


CASE : (差 1)
  中floor 和ceiling差1,
  最簡單的解,令p=-x, q=x;

#include <stdio.h>
#include <math.h>

int main()
{
  long int x,k,p,q;
  int i,n;

  scanf("%d",&n);
  while(n)
  {
    
     for(i=0;i<n;i++)
     {
        scanf("%ld %ld",&x,&k);
        if( (int)x%(int)k ==0)
        {
            p=0; q=k;
        }
        else /*floor(x/k) ceil(x/k) 差 1*/
        {    
           p=(0L-x);
           q=x;
        }
        printf("%ld %ld\n",p,q);               
     }
     n--;              
 
  } 
  system("pause");
  return 0;   
}

沒有留言:

張貼留言