PIXNET Logo登入

骷骷的筆記

跳到主文

因為骷骷太健忘,所以要記下來……。

部落格全站分類:心情日記

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 6月 04 週二 201320:06
  • a020: 身分證檢驗

題目連結:a020: 身分證檢驗

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 
 while(sc.hasNext()){
 
 String id=sc.nextLine();
 
 System.out.println(check(id)?"real":"fake");
 }
 
 sc.close();
 }
 
 private static boolean check(String id) {
 
 int num1=change( id.charAt(0) );
 int num2=num1/10+num1%10*9;
 for(int i=8;i>0;i--){
 
 num2+=( id.charAt(9-i)-'0' )*i;
 }
 num2+=id.charAt(9)-'0';
 
 return num2%10==0?true:false;
 }
 
 private static int change(char charAt) {
 
 int[] azCode={10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
 
 return azCode[charAt-'A'];
 }
 }
 /*測試資料:
 T112663836
 real
 
 S154287863
 fake
 */
 

==========

這次的題目就比較簡單啦,唯一的陷阱就是 A 到 Z 換成數字時,中間有跳一些數字。

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(693)

  • 個人分類:JAVA
▲top
  • 6月 04 週二 201314:26
  • 現實中的北風和太陽

太陽是一位富有的男人,而北風則是一名窮困的男人。北風和太陽決定舉行一場比賽,

看看誰的力量比較強,強到讓路過的女人脫下身上的衣服。

北風越是用力地拉扯女人身上的衣服,女人就把自己包得越緊。然而,

在太陽的金錢光芒照耀下,女人因為誘惑而不得不脫下身上的衣服。

 

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(1,106)

  • 個人分類:殘酷
▲top
  • 5月 22 週三 201322:14
  • a017: 五則運算 (改)

題目連結:a017: 五則運算

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 
 while(sc.hasNext()){
 
 String cal=sc.nextLine();
 
 System.out.println( answerMe(cal) );
 }
 
 sc.close();
 }
 
 private static int answerMe(String cal){
 
 int temp1=0;
 char op1=' ';
 int temp2=0;
 char op2=' ';
 int temp3=0;
 
 int length=cal.length()-1; //算式的最後不能用空白做結尾,length 為最後一位非空白的位置
 for(;length>0;length--){
 
 if(cal.charAt(length)!=' '){
 
 break;
 }
 }
 
 for(int i=0;i<=length;i++){
 
 if(cal.charAt(i)=='('){
 
 short t=1;
 int j=i+1;
 for(;j<=length;j++){
 
 if(cal.charAt(j)=='('){
 
 t++;
 }else if(cal.charAt(j)==')'){
 
 t--;
 if(t==0){
 
 break;
 }
 }
 }
 
 if(op1==' '){
 
 temp1=answerMe( cal.substring(i+1,j) );
 }else if(op2==' '){
 
 temp2=answerMe( cal.substring(i+1,j) );
 }else{
 
 temp3=answerMe( cal.substring(i+1,j) );
 }
 
 i=j; //這裡的 j 是 相對應的右括號位置
 
 if(opLevel(op1)<opLevel(op2)){
 
 temp2=fiveOp(temp2,op2,temp3);
 op2=' ';
 
 if(j==length){
 
 return fiveOp(temp1,op1,temp2);
 }
 }else if(op1!=' '&&op2!=' '){
 
 temp1=fiveOp(temp1,op1,temp2);
 op1=op2;
 temp2=temp3;
 op2=' ';
 
 if(j==length){
 
 return fiveOp(temp1,op1,temp2);
 }
 }else if(op1!=' '&&j==length){
 
 return fiveOp(temp1,op1,temp2);
 }
 
 }else if('0'<=cal.charAt(i)&&cal.charAt(i)<='9'){
 
 int j=i;
 for(;j<=length;j++){
 
 if(cal.charAt(j)<'0'||'9'<cal.charAt(j)){
 
 break;
 }
 }
 
 if(op1==' '){
 
 temp1=Integer.parseInt( cal.substring(i, j) );
 }else if(op2==' '){
 
 temp2=Integer.parseInt( cal.substring(i, j) );
 }else{
 
 temp3=Integer.parseInt( cal.substring(i, j) );
 }
 
 i=j-1; //這裡的 j 是數字的後一個位置
 
 if(opLevel(op1)<opLevel(op2)){
 
 temp2=fiveOp(temp2, op2, temp3);
 op2=' ';
 
 if(j==length+1){
 
 return fiveOp(temp1, op1, temp2);
 }
 }else if(op1!=' '&&op2!=' '){
 
 temp1=fiveOp(temp1, op1, temp2);
 op1=op2;
 temp2=temp3;
 op2=' ';
 
 if(j==length+1){
 
 return fiveOp(temp1, op1, temp2);
 }
 }else if(op1!=' '&&j==length+1){
 
 return fiveOp(temp1, op1, temp2);
 }
 
 }else if(cal.charAt(i)=='+'||cal.charAt(i)=='-'||cal.charAt(i)=='*'||cal.charAt(i)=='/'||cal.charAt(i)=='%'){
 
 if(op1==' '){
 
 op1=cal.charAt(i);
 }else if(op2==' '){
 
 op2=cal.charAt(i);
 }
 }
 }
 
 return temp1;
 }
 
 private static int fiveOp(int a, char op, int b){
 
 switch (op) {
 case '+':
 return a+b;
 case '-':
 return a-b;
 case '*':
 return a*b;
 case '/':
 return a/b;
 case '%':
 return a%b;
 default:
 return 0;
 }
 }
 
 private static byte opLevel(char op){ //運算子的先後順序,byte 應該就夠分了
 
 switch (op) {
 case '+':
 return 1;
 case '-':
 return 1;
 case '*':
 return 2;
 case '/':
 return 2;
 case '%':
 return 2;
 default:
 return 0;
 }
 }
 }
 /*測試資料:
 2 + 3 * 4
 14
 
 2 * ( 3 + 4 ) * 5
 70
 */
 

==========

這次不使用 trim() 方法,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(717)

  • 個人分類:JAVA
▲top
  • 5月 17 週五 201323:58
  • a017: 五則運算

題目連結:a017: 五則運算

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 
 while(sc.hasNext()){
 
 String cal=sc.nextLine();
 
 System.out.println( answerMe(cal.trim()) ); //算式的最後不能用空白做結尾
 }
 
 sc.close();
 }
 
 private static int answerMe(String cal){
 
 int temp1=0;
 char op1=' ';
 int temp2=0;
 char op2=' ';
 int temp3=0;
 
 for(int i=0;i<cal.length();i++){
 
 if(cal.charAt(i)=='('){
 
 short t=1;
 int j=i+1;
 for(;j<cal.length();j++){
 
 if(cal.charAt(j)=='('){
 
 t++;
 }else if(cal.charAt(j)==')'){
 
 t--;
 if(t==0){
 
 break;
 }
 }
 }
 
 if(op1==' '){
 
 temp1=answerMe( cal.substring(i+1,j).trim() ); //算式的最後不能用空白做結尾
 }else if(op2==' '){
 
 temp2=answerMe( cal.substring(i+1,j).trim() ); //算式的最後不能用空白做結尾
 }else{
 
 temp3=answerMe( cal.substring(i+1,j).trim() ); //算式的最後不能用空白做結尾
 }
 
 i=j; //這裡的 j 是 相對應的右括號位置
 
 if(opLevel(op1)<opLevel(op2)){
 
 temp2=fiveOp(temp2,op2,temp3);
 op2=' ';
 
 if(j==cal.length()-1){
 
 return fiveOp(temp1,op1,temp2);
 }
 }else if(op1!=' '&&op2!=' '){
 
 temp1=fiveOp(temp1,op1,temp2);
 op1=op2;
 temp2=temp3;
 op2=' ';
 
 if(j==cal.length()-1){
 
 return fiveOp(temp1,op1,temp2);
 }
 }else if(op1!=' '&&j==cal.length()-1){
 
 return fiveOp(temp1,op1,temp2);
 }
 
 }else if('0'<=cal.charAt(i)&&cal.charAt(i)<='9'){
 
 int j=i;
 for(;j<cal.length();j++){
 
 if(cal.charAt(j)<'0'||'9'<cal.charAt(j)){
 
 break;
 }
 }
 
 if(op1==' '){
 
 temp1=Integer.parseInt( cal.substring(i, j) );
 }else if(op2==' '){
 
 temp2=Integer.parseInt( cal.substring(i, j) );
 }else{
 
 temp3=Integer.parseInt( cal.substring(i, j) );
 }
 
 i=j-1; //這裡的 j 是數字的後一個位置
 
 if(opLevel(op1)<opLevel(op2)){
 
 temp2=fiveOp(temp2, op2, temp3);
 op2=' ';
 
 if(j==cal.length()){
 
 return fiveOp(temp1, op1, temp2);
 }
 }else if(op1!=' '&&op2!=' '){
 
 temp1=fiveOp(temp1, op1, temp2);
 op1=op2;
 temp2=temp3;
 op2=' ';
 
 if(j==cal.length()){
 
 return fiveOp(temp1, op1, temp2);
 }
 }else if(op1!=' '&&j==cal.length()){
 
 return fiveOp(temp1, op1, temp2);
 }
 
 }else if(cal.charAt(i)=='+'||cal.charAt(i)=='-'||cal.charAt(i)=='*'||cal.charAt(i)=='/'||cal.charAt(i)=='%'){
 
 if(op1==' '){
 
 op1=cal.charAt(i);
 }else if(op2==' '){
 
 op2=cal.charAt(i);
 }
 }
 }
 
 return temp1;
 }
 
 private static int fiveOp(int a, char op, int b){
 
 switch (op) {
 case '+':
 return a+b;
 case '-':
 return a-b;
 case '*':
 return a*b;
 case '/':
 return a/b;
 case '%':
 return a%b;
 default:
 return 0;
 }
 }
 
 private static byte opLevel(char op){ //運算子的先後順序,byte 應該就夠分了
 
 switch (op) {
 case '+':
 return 1;
 case '-':
 return 1;
 case '*':
 return 2;
 case '/':
 return 2;
 case '%':
 return 2;
 default:
 return 0;
 }
 }
 }
 /*測試資料:
 2 + 3 * 4
 14
 
 2 * ( 3 + 4 ) * 5
 70
 */
 

==========

這次的題目比較不好寫,困擾骷骷很久,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(643)

  • 個人分類:JAVA
▲top
  • 4月 23 週二 201300:54
  • a016: 數獨(SUDOKU)

題目連結:a016: 數獨(SUDOKU)

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 
 while(sc.hasNext()){
 
 int[][] sudoku=new int[9][9];
 
 for(int i=0;i<9;i++){
 
 for(int j=0;j<9;j++){
 
 sudoku[i][j]=sc.nextInt();
 }
 }
 
 boolean t=true;
 
 L1:
 for(int i=0;i<9;i++){
 
 //檢查 列 是否重複
 //row:i column:j
 for(int j=1;j<9;j++){
 
 for(int k=j-1;k>=0;k--){
 
 if(sudoku[i][j]==sudoku[i][k]){
 
 t=false;
 break L1;
 }
 }
 }
 
 //檢查 欄 是否重複
 //column:i row:j
 for(int j=1;j<9;j++){
 
 for(int k=j-1;k>=0;k--){
 
 if(sudoku[j][i]==sudoku[k][i]){
 
 t=false;
 break L1;
 }
 }
 }
 
 //檢查每個小九宮格是否重複
 //
 //i:036
 // 147
 // 258
 //i 跑大九宮格 ( 1 個大九宮格有 81個值 )
 //
 //j:012
 // 345
 // 678
 //j 跑小九宮格 ( 1 個小九宮格有 9 個值 ) 
 for(int j=1;j<9;j++){
 
 for(int k=j-1;k>=0;k--){
 
 if(sudoku[i%3*3+j/3][j%3+i/3*3]==sudoku[i%3*3+k/3][k%3+i/3*3]){
 
 t=false;
 break L1;
 }
 }
 }
 } 
 
 if(t){
 
 System.out.println("yes");
 }else{
 
 System.out.println("no");
 }
 } 
 
 sc.close();
 }
 }
 /*測試資料:
 1 2 3 4 5 6 7 8 9
 2 3 4 5 6 7 8 9 1
 3 4 5 6 7 8 9 1 2
 4 5 6 7 8 9 1 2 3
 5 6 7 8 9 1 2 3 4
 6 7 8 9 1 2 3 4 5
 7 8 9 1 2 3 4 5 6
 8 9 1 2 3 4 5 6 7
 9 1 2 3 4 5 6 7 8
 no
 
 1 9 3 2 6 5 4 7 8
 7 8 2 3 1 4 9 5 6
 4 5 6 9 7 8 1 3 2
 2 3 4 8 5 1 6 9 7
 9 6 5 4 3 7 2 8 1
 8 7 1 6 9 2 3 4 5
 3 1 9 5 8 6 7 2 4
 5 2 7 1 4 3 8 6 9
 6 4 8 7 2 9 5 1 3
 yes
 */
 

==========

本來是在找 JAVA 有沒有 goto 的語法,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(3) 人氣(2,698)

  • 個人分類:JAVA
▲top
  • 4月 04 週四 201318:08
  • a015: 矩陣的翻轉

題目連結:a015: 矩陣的翻轉

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 
 while(sc.hasNext()){
 
 int row=sc.nextInt();
 int column=sc.nextInt();
 int[] i=new int[row*column];
 
 //正常的矩陣 r*column+c,每次都 c+1,如果爆掉就進位到 r
 for(int j=0;j<i.length;j++){
 
 i[j]=sc.nextInt();
 }
 
 //轉置的矩陣 r*column+c,每次都 r+1,如果爆掉就進位到 c
 int r=0,c=0;
 for(int j=0;j<i.length;j++){
 
 if(r!=0) System.out.print(" ");
 
 System.out.print(i[r*column+c]);
 r++;
 
 if(row<=r){
 r=0;
 c++;
 System.out.println();
 }
 }
 } 
 sc.close();
 }
 }
 /*測試資料:
 2 3
 3 1 2
 8 5 4
 3 8
 1 5
 2 4
 */
 

==========

這邊骷骷用的陣列是一維扮二維,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(1,267)

  • 個人分類:JAVA
▲top
  • 4月 04 週四 201311:09
  • a013: 羅馬數字

題目連結:a013: 羅馬數字

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 private static String setR[]={"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
 private static int setI[]={1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
 //將所有的減法結果也納入陣列中( CM、CD、XC、XL、IX、IV ),之後只要全部當作基本元素來做就好
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 String s1,s2;
 
 while(!(s1=sc.next()).equals("#")){
 
 s2=sc.next();
 
 
 System.out.println( iToR( Math.abs( rToI(s2)-rToI(s1) ) ) );
 }
 
 sc.close();
 }
 
 private static int setRTosetI(String s){
 
 for(int i=0;i<setR.length;i++){
 
 if(s.equals(setR[i])){
 
 return setI[i];
 }
 }
 return 0;
 }
 
 private static int rToI(String s){
 
 int i=0;
 for(int j=0;j<s.length();j++){
 
 int a=0,b=0; //a 為某一個羅馬數字的阿拉伯數字值, b 是下一個
 boolean t=false; //t 代表 b 是否可以給 a 用
 
 if (t) {
 a=b;
 t=false;
 } else {
 a=setRTosetI(String.valueOf(s.charAt(j)));
 }
 
 if(j<s.length()-1){
 
 b=setRTosetI( String.valueOf( s.charAt(j+1) ) );
 
 if(a<b){
 i+=b-a;
 j++; //一次讀取 a、b, j 要多+1
 }else{
 i+=a;
 t=true;
 }
 }else{
 i+=a;
 }
 }
 
 return i;
 }
 
 private static String iToR(int i){
 
 if(i==0) return "ZERO";
 
 String s="";
 while(i>0){
 
 for(int j=0;j<setI.length;j++){
 
 if(setI[j]<=i){
 
 s+=setR[j];
 i-=setI[j];
 j--;
 continue;
 }
 }
 }
 
 return s;
 }
 }
 /*測試資料:
 I I
 ZERO
 MM II
 MCMXCVIII
 #
 
 備註:
 I 1
 IV 4
 V 5
 IX 9
 X 10
 XL 40
 L 50
 XC 90
 C 100
 CD 400
 D 500
 CM 900
 M 1000
 */
 

 ==========

骷骷覺得這題難是難在對羅馬數字的規則不熟,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(975)

  • 個人分類:JAVA
▲top
  • 4月 03 週三 201318:41
  • a010: 因數分解

題目連結:a010: 因數分解

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc = new Scanner(System.in);
 int s;
 
 while(sc.hasNextInt()){
 
 s=sc.nextInt();
 
 int i=2;
 boolean first=true;
 do{
 
 int c=0;
 while(s%i==0){
 c++;
 s/=i;
 }
 if(c>0){
 if(first){
 System.out.print( i + (c==1?"":("^"+c)) );
 first=false;
 }else{
 System.out.print( " * " + i + (c==1?"":("^"+c)) );
 }
 }
 
 i++;
 }while(s!=1);
 System.out.println();
 }
 }
 }
 /*測試資料:
 20
 2^2 * 5
 17
 17
 999997
 757 * 1321
 */
 

==========

其實這題骷骷本來沒有要記錄的,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(1) 人氣(1,655)

  • 個人分類:JAVA
▲top
  • 3月 28 週四 201315:58
  • a008: 中文大寫數字

題目連結:a008: 中文大寫數字

JAVA 程式碼

//作者:骷骷
 //網誌:http://bekachu.pixnet.net/blog
 
 import java.util.Scanner;
 
 public class JAVA {
 
 public static void main(String[] args) {
 
 Scanner sc=new Scanner(System.in);
 while(sc.hasNextInt()){
 
 int a=sc.nextInt();
 System.out.println( change(a) );
 }
 sc.close();
 }
 
 private static String change(int a) {
 
 String s="";
 
 int length=1,b=a;
 while((b/=10)!=0){
 length++;
 }
 
 String s1="",s2="";
 boolean t=false; //t => 確定是否需要補 "億"、"萬"
 for(int i=length-1;i>=0;i--){
 s2=change_1(a,i);
 if(s2=="零"){
 if(t&&(i&3)==0){
 s+=wei_2(i); //補 "億"、"萬"
 s1="";
 t=false;
 }else{
 s1="零"; //記錄 s2 之前是否有 "零" 出現
 } 
 }else{
 s+=s1+s2;
 s1="";
 t=true; //有 s2!="零" 要留意補 "億"、"萬"
 } 
 }
 return s;
 }
 
 private static String change_1(int a, int j){
 
 //j=index 右至左,index=0開始算
 for(int i=0;i<j;i++){
 a/=10;
 }
 a%=10;
 
 String c1=wei_1(a);
 if(c1=="零"){
 return "零";
 }else{
 return c1+wei_2(j);
 }
 }
 
 private static String wei_1(int j) {
 
 switch (j) {
 case 0:
 return "零";
 case 1:
 return "壹";
 case 2:
 return "貳";
 case 3:
 return "參";
 case 4:
 return "肆";
 case 5:
 return "伍";
 case 6:
 return "陸";
 case 7:
 return "柒";
 case 8:
 return "捌";
 case 9:
 return "玖";
 default:
 return "";
 }
 }
 
 private static String wei_2(int a){
 
 switch (a) {
 case 1:
 case 5:
 case 9:
 return "拾";
 case 2:
 case 6:
 return "佰";
 case 3:
 case 7:
 return "仟";
 case 4:
 return "萬"; 
 case 8:
 return "億";
 default:
 return "";
 }
 }
 }
 /*測試資料:
 2147483647
 貳拾壹億肆仟柒佰肆拾捌萬參仟陸佰肆拾柒
 12345
 壹萬貳仟參佰肆拾伍
 10200
 壹萬零貳佰
 2002020202
 貳拾億零貳佰零貳萬零貳佰零貳*/
 

 

==========

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(824)

  • 個人分類:JAVA
▲top
  • 3月 18 週一 201312:39
  • 右鍵拖曳的效果

偶然中,骷骷發現右鍵拖曳也有功能,在此錄影記錄。

==========今天是國際早餐日耶!==========

骷骷今天早上就去附近的麥當勞排隊領免費的滿福堡,

聽說有人三點開始來排隊,真是太瘋狂了,

(繼續閱讀...)
文章標籤

骷骷 發表在 痞客邦 留言(0) 人氣(54)

  • 個人分類:驚訝
▲top
«1234»

BloggerAds

BlogAD

文章分類

  • 未分類文章 (1)

最新文章

    文章精選

    文章搜尋

    參觀人氣

    • 本日人氣:
    • 累積人氣: