題目連結: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
*/

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


題目連結: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) 人氣()


題目連結: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
*/

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


題目連結: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) 人氣()

題目連結: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) 人氣()


題目連結: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) 人氣()

題目連結: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) 人氣()


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

==========今天是國際早餐日耶!==========
骷骷今天早上就去附近的麥當勞排隊領免費的滿福堡,

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


▼CamStudio 安裝及相關問題

中間的影片編輯有點問題,不過應該看得懂啦,
骷骷還去配了字幕解釋,可以去右下角設定字幕,

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

ChangeColor01
Excel 要如何設定才能讓列與列之間的顏色不同,骷骷知道的有三種方法。
方法一:使用內建的 "格式化表格"
▼先選好要變色的範圍,接著選擇 "格式化為表格" ,之後再選擇喜歡的顏色樣式。
 

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


小時候有玩過的一種小遊戲,題目會給 5 個數字,要求前 4 個數字做四則運算要等於第 5 個數字,可以用加、減、乘、除以及括號,骷骷就寫了一個搜尋工具,搜尋所有的解答,寫得不好請見諒,如果有任何意見也可以留言給骷骷喔。
四則運算遊戲工具
==========骷骷本來以為課程要結束了,沒想到才正要開始……。==========
骷骷這次上完這堂課之後,就去詢問之後選課的事情,

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

vlookup 1
▼公式=VLOOKUP(想要搜尋的值或是搜尋值所在的儲存格,比對的欄範圍,最左欄是拿來比對的欄,在此輸入第幾欄是結果欄, TRUE 或 1 代表比對欄需要按照遞增的方式排序,當比對值≦搜尋值<下一個比對值(如果有下一個比對值的話),就顯示比對的結果值, FALSE 或 0 代表當比對值=搜尋值,才能顯示比對的結果值)

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

« 1 2 3 4
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。