1023正常數字給1
這邊為了方便起見,所以
只列印出101~200中間重複數字給0 不重複給1
本篇目標就是101~200陣列給0或給1
成功答案結果為
兩個函數功能
Dismantling(拆數字)
Comparison(比對)
判別會是 ex:
box1[110]=0 box1[133]=0 <==重複
box1[120]=1 box1[123]=1 <==不重複
在這邊先給大家看陣列若沒給值 預設都是0.....
示意圖1~100(程式碼如下)
import java.util.*; public class Arraysamenum { static int i=0,j=0,x=0,y=0,z=0; static int[] box1=new int[101]; public static void main (String args[]) { for(i=1;i<=100;i++) { System.out.print("box1["+i+"]="+box1[i]+" "); if(i%10==0) { System.out.println(""); } } } }-------------------------------------Dismantling---------------------
public static void Dismantling(int x) { int i=0; for(i=0;i<=2;i++) { switch(i) { case 0: y=x/100; box2[i]=y; break; case 1: z=(x-(y*100))/10; box2[i]=z; break; case 2: a=(x-(y*100)-(z*10)); box2[i]=a; break; } } }
以上為拆解數字 先前解釋過了 這邊不贅述
-----------------------Comparison----------------------
接下來 我們就來把值拆掉放到另外一個陣列box2 去做比對動作....(一樣拆數字)
示意圖如下 可以發現我把前一個值跟後一個值抓出來做比對 是一個巢狀迴圈
i=0的時候 j=i+1; j永遠是下一個數字 這樣跑過一次 如果我發現有重複數字
box2[i]==box2[j]的時候 我就把ck存成1 ck=1 沒有重複數字就存0 做完迴圈後回傳ck值 判別ck值就知道有沒有重複了
提示容易寫錯重點:因為這是個迴圈 若我在第0個跟第1個對有重複
但第1個數字跟第2個數字沒有重複
如果你寫成.....
for(i=0;i<=1;i++) { for(j=i+1;j<=2;j++) { if(box2[i]==box2[j]) { ck=1;//重複 } else { ck=0;//沒重複 } } return ck;//廻傳ck }那麼....就算第0個跟第1個數字有重複 最終ck值還是"0" 因為第1個和第2個不符合 所以ck又被覆蓋掉了對吧?所以我們應該....如果有重複ck=1 那麼之後就直接跳出迴圈
是不是我只要在else 給0之前做個判斷呢?
if(ck==1)break; 所以我只要拿到值ck==1那麼我就直接跳出 就不給0
所以程式碼就是....
public static int Comparison(int[] box2) { int i=0,j=0; for(i=0;i<=1;i++) { for(j=i+1;j<=2;j++) { if(box2[i]==box2[j]) { ck=1; } else { if(ck==1)break; ck=0; } } } return ck; }
------------------------做完拆解數字跟比對之後我們把功能融合起來---------------------------------
做完這邊之後......呼應本篇的要求 要把101~200陣列弄出來對吧?
所以呢 是不是就會寫成for(i=101;i<=201;i++){執行要的程式}?
-----------------------------------以下為執行要的程式內容---------------------------------------------
好~該要的功能都有了 拆解數字跟比對
所以拆解數字我放一個函數Dismantling 比對我放另外一個函數Comparison
Dismantling(i)//拆解並存給box2[]
Comparison(int[] box2)//box2的比對 回傳ck值 (1有重複 0沒重複)
接下來判斷
if(ck==1)
{
box1[i]=0
ck=0;//注意!box[i]給完0之後 ck要回復成0 否則 後面都是1.....
}
else
{
box1[i]=1;
ck=0;
}
接下來就列印 不解釋了......
附上完整程式碼...
import java.util.*; public class Arraysamenum { static int x=0,y=0,z=0,a=0,ck=0,ak=0; static int[] box1=new int[201]; static int[] box2=new int[3]; public static void main (String args[]) { int i=0; for(i=101;i<=200;i++) { Dismantling(i); Comparison(box2); if(ck==1) { box1[i]=0; ck=0; } else { box1[i]=1; ck=0; } System.out.print("box1["+i+"]="+box1[i]+" "); if(i%10==0) { System.out.println(""); } } } public static void Dismantling(int x) { int i=0; for(i=0;i<=2;i++) { switch(i) { case 0: y=x/100; box2[i]=y; break; case 1: z=(x-(y*100))/10; box2[i]=z; break; case 2: a=(x-(y*100)-(z*10)); box2[i]=a; break; } } } public static int Comparison(int[] box2) { int i=0,j=0; for(i=0;i<=1;i++) { for(j=i+1;j<=2;j++) { if(box2[i]==box2[j]) { ck=1; } else { if(ck==1)break; ck=0; } } } return ck; } }
沒有留言:
張貼留言