Discussion:
[殘念]用 Java 寫了快一天的 ACM
(时间太久无法回复)
好累想睡覺
2006-10-11 17:58:48 UTC
Permalink
※ 引述《qrtt1 (愚者)》之銘言:
: ※ 引述《aeifkz (好累想睡覺)》之銘言:
: : 發現真的很難寫 難怪上傳上去的語言 Java 頗少的 ( 泣~~QQ )
: : 光是開頭的第一個規則 程式要寫在 class Main 裡面
: : 就花了我半天的時間 (我承認我沒有好好的看規則 XD )
: : 好不容易解決了 compiler error 的問題
: : 想不到.......
: : 之後出來的一直都是 Wrong Answer
: : 可是我自己測試樣本數據都對 @@
: : 目前也才開始寫第100題 3n + 1
: : 想不到挫折感還蠻大的....
: : 不知道大家的經驗怎麼樣 ??
: : 我現在有點打算不上傳了...自己寫爽的就好了 ╮(﹀_﹀")╭
: 第一個數要比第二個數小,才不會有wrong answer
: 題目給你的數,不一定會是小的在前面
感謝版友的回答...所以還是 po 一下程式碼好了

輸入的部分是參考之前有人 po 過的輸入方式

黃字的不部分 是我判斷過兩個輸入數字的大小關係

判斷後做為 for 迴圈的初始值和判斷值

import java.io.*;
import java.util.*;

class Main
{
//參考之前版友 po 的輸入部分
static String ReadLn (int maxLg)
{
byte lin[] = new byte [maxLg];
int lg = 0, car = -1;
String line = "";

try
{
while (lg < maxLg)
{
car = System.in.read();
if ((car < 0) || (car == '\n')) break;
lin [lg++] += car;
}
}
catch (IOException e)
{
return (null);
}

if ((car < 0) && (lg == 0)) return (null); // eof
return (new String (lin, 0, lg));
}

public Main () // entry point from OS
{
Begin() ;
}

private void Begin()
{
String input;
StringTokenizer idata;
int a, b ;

while ((input = Main.ReadLn (255)) != null)
{
idata = new StringTokenizer (input);

a = Integer.parseInt (idata.nextToken()) ;
b = Integer.parseInt (idata.nextToken()) ;

int max = 0 , temp = 0 ;

if( a > b )
{
for(int k = (b) ; k<(a+1) ; k++)
{
temp = caluculate(k) ;

if(max < temp)
max = temp ;
}
}
else
{

for(int k = (a) ; k<(b+1) ; k++)
{
temp = caluculate(k) ;

if(max < temp)
max = temp ;
}
}


System.out.print(a + " " + b + " " + max ) ;

}
}

public int caluculate(int data)
{
int length = 0 ;

while(data!=1)
{
if( (data%2) == 1 )
{
data = data * 3 + 1 ;
}
else
{
data = data / 2 ;
}

length = length + 1 ;
}

length = length + 1 ;

return length ;
}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.52
※ 編輯: aeifkz 來自: 163.25.118.52 (10/12 09:58)
愚者
2006-10-11 18:04:32 UTC
Permalink
※ 引述《aeifkz (好累想睡覺)》之銘言:
: if( a > b )
: {
: for(int k = (b) ; k<(a+1) ; k++)
: {
: temp = caluculate(k) ;
: if(max < temp)
: max = temp ;
: }
: }
: else
: {
: for(int k = (a) ; k<(b+1) ; k++)
: {
: temp = caluculate(k) ;
: if(max < temp)
: max = temp ;
: }
: }
: System.out.print(a + " " + b + " " + max ) ;
: }
: }

ab交換就好了@"@不用寫二個for-loop :D

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.213
PEACE
2006-10-11 19:01:40 UTC
Permalink
※ 引述《aeifkz (好累想睡覺)》之銘言:
: 發現真的很難寫 難怪上傳上去的語言 Java 頗少的 ( 泣~~QQ )
: 光是開頭的第一個規則 程式要寫在 class Main 裡面
: 就花了我半天的時間 (我承認我沒有好好的看規則 XD )
: 好不容易解決了 compiler error 的問題
: 想不到.......
: 之後出來的一直都是 Wrong Answer
: 可是我自己測試樣本數據都對 @@
: 目前也才開始寫第100題 3n + 1
: 想不到挫折感還蠻大的....
: 不知道大家的經驗怎麼樣 ??
: 我現在有點打算不上傳了...自己寫爽的就好了 ╮(﹀_﹀")╭

我覺得ACM程式題基本上都是寫一些小程式,或是演算法的實作
其實用C來寫可能會比較快

物件導向的東西好像用不太到
而若想好好的注意封裝的一些原則,程式寫起來要花很多時間
若不注意這些原則,又怕自己習慣變差

如果寫了這些題目不上傳做測試的話,很有可能找不出你的bug。也達不到練習的效果了...

大部分的題目都可以brute force解
問題是你的brute force是否夠快?能不能符合競賽要求?
每一題都用brute force的話,練習的意義也沒啦。

建議你可以去該網站的forum找一些測資(input data)
想不出好解法的話,也可以到Algorithmist這個網站去搜尋
在我的觀念裡,偷看答案沒什麼不對的,重點是有沒有學到東西


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.241.17.253

继续阅读narkive:
Loading...