2017年6月12日 星期一

CPE 032 UVa10190-Divide, But Not Quite Conquer!


題目原文
題目內容

輸入說明:


輸出說明:

Sample Input

125 5
30 3
80 2
81 3

Sample Output

125 25 5 1
Boring!
Boring!
81 27 9 3 1

解法

簡單來說,會給你兩個值;可以直接看成一個是被除數,一個是除數。
然後如果這兩個數沒有辦法被整除到剩下1就印Boring,比較要注意的是兩數之間的大小,正常來說第一個數字要比第二個數字大,這題組主要用迴圈和矩陣來運算完成。

(以上資料來源:大學程式能力檢定Collegiate Programming Examination(CPE))




程式碼解答





#include <stdio.h>
#include <stdlib.h>
#define MAX 100000
int main()
{
 int n, m;
 int a[MAX];
 int i, j;
 while(scanf("%d %d", &n, &m)==2)///要輸入兩個值才執行
 {
  i=0;
  a[i++] = n;
  int divisible = 1;///判斷條件之一divisible = 1可以整除 =0不可整除
  int key = (m==1 || m>n)? 0: 1;///判斷條件之二key m==1 或者 m>n 則給予0 
  while(a[i-1] != 1&&key == 1 )///如果已經除到1 了 則跳出迴圈
  {
   if(a[i-1]%m!=0)///如果不整除 則讓判斷條件一等於零並且跳出迴圈
   {
    divisible = 0;
    break;
   }
   a[i]= a[i-1]/m; ///運算過程
   i = i + 1;
  }
  if(divisible && key ==1)///列印時先驗證所有條件是否成立
  {
   for(j=0; j<i; j++)
   {
    printf ("%d", a[j]);
    printf((j+1 == i)? "\n" : " ");
   }
  }
  else 
  {
   printf("Boring!\n");
  }
 }
}

程式碼打包:解法一

沒有留言:

張貼留言