2013年5月27日 星期一

CH14 例外處理

原始檔案 加上三樣例外處理
class try0521{
        public static void main(String[] args){

 String score="75,88,62,77,69,82,79,85,93,4l,81,53,66,71";
                 String[] token=score.split("[,]");
 try{
 int num=0, sum=0;

 int[] data=new int[token.length];

 for(int i=1;i<=token.length;i++)
  data[i]=Integer.parseInt(token[i]);

 for(int dd:data) sum=sum+dd;
 System.out.println(" Average : "+sum/num);
 }catch(ArrayIndexOutOfBoundsException e){
  System.out.println(" ArrayIndexOutOfBoundsException: "+e);
 }catch(NumberFormatException  e){
  System.out.println("NumberFormatException: "+e);
 }catch(ArithmeticException e){
  System.out.println("ArithmeticException: "+e);
 } 
 

 }
}

第一點
出現以下訊息
NumberFormatException: java.lang.NumberFormatException: For input string: "4l"
String score="75,88,62,77,69,82,79,85,93,41,81,53,66,71"; 將4l改正為41之後
第二點
出現以下訊息
ArrayIndexOutOfBoundsException: java.lang.ArrayIndexOutOfBoundsException: 14
for(int i=1;i<token.length;i++)改為 i < token.length
第三點
出現以下訊息
ArithmeticException: java.lang.ArithmeticException: / by zero
加上num=token.length;

以上三點例外處理改正之後就為正常運行

2013年5月21日 星期二

物件導向期末小考5/21


class ex0423b{
        public static void main(String[] args){

 String stdRec="E9923017,Mary Wu,75,0.3,67,0.3,82,0.4";
 
                String[] token=stdRec.split("[,]");

 double fscore=0;

 int s1,s2,s3;
 double p1,p2,p3;
 s1=Integer.parseInt(token[2]);
 s2=Integer.parseInt(token[4]);
 s3=Integer.parseInt(token[6]);
 p1=Double.parseDouble(token[3]);
 p2=Double.parseDouble(token[5]);
 p3=Double.parseDouble(token[7]);
 fscore=s1*p2+s2*p2+s3*p3;

 System.out.println(" Name: "+ token[1]);
 System.out.println(" ID: "+ token[0]);
 System.out.println("     1st Score: "+ token[2]);
 System.out.println("     2nd Score: "+ token[4]);
 System.out.println("     3rd Score: "+ token[6]);
 System.out.println(" Final Score: "+ fscore); 
        }
}


class score{
 int[] sdata;
 int pvalue;

 score(int[] data){
  sdata=data;
  pvalue=60;
 }

 void setPvalue(int pp){
  this.pvalue=pp;
 }

 double getAvg(){ // Two decimal places
  int count=0,sum=0;
  for(int i:sdata) {
   sum+=i;
   count++;
  }
  return (int)((float)sum/count*100)/100.0;
 }

 int getPassNo(){
  int count=0;
  for(int i:sdata) if(i>=pvalue) count++;
  return count;
 }

}

class subScore extends score{ // inhertance super class score
// call super class constructor
 int[] sdata;
 subScore(int[] d){
  super(d);
  sdata=super.sdata;
 }
// create a method for sorting

 void sort(){
  int tmp;
  for(int i=0;i<sdata.length-1;i++){
   for(int j=i+1;j< sdata.length;j++){
    if(sdata[i] < sdata[j]){
     tmp=sdata[i];
     sdata[i]=sdata[j];
     sdata[j]=tmp;
    }
   }
  }
 }
 
 int getRank(int f){

  return sdata[f-1];
 }

 int getHigh(){

  return sdata[0];
 }
 
 int getLow(){

  return sdata[sdata.length-1];
 }
} 

class ex0430{
public static void main(String[] args) 
{
 int[] data1={75, 90, 83, 42, 66, 55, 93, 72, 88, 62, 35, 96, 81, 53, 91}; // ITMA 60
 int[] data2={78, 54, 63, 89, 79, 67, 95, 46, 93, 81, 99, 50, 70, 66, 90, 71, 88}; // ITMB 70

//
// instance an object by data1
 subScore d1 = new subScore(data1);
 d1.setPvalue(60);
 d1.sort();

// 
// instance an object by data2
 subScore d2 = new subScore(data2);
 d2.setPvalue(70);
 d2.sort();
//
 System.out.println(" Average of ITMA: "+d1.getAvg());
 System.out.println(" PassNo of ITMA: "+d1.getPassNo());
 System.out.println(" Highest score of ITMA: "+d1.getHigh());
 System.out.println(" Lowest score of ITMA: "+d1.getLow());
 System.out.println(" 3RD score of ITMA: "+d1.getRank(3));
 System.out.println(" 7th score of ITMA: "+d1.getRank(7));
 System.out.println(" ");
 System.out.println(" Average of ITMB: "+d2.getAvg());
 System.out.println(" PassNo of ITMB: "+d2.getPassNo());
 System.out.println(" Highest score of ITMB: "+d2.getHigh());
 System.out.println(" Lowest score of ITMB: "+d2.getLow());
 System.out.println(" 2nd score of ITMB: "+d2.getRank(2));
 System.out.println(" 5th score of ITMB: "+d2.getRank(5)); 
}
}

interface Ip1{
    int num=20;

    void show();
}

interface Ip2{
    int num=50;

    void show();
}

interface Ic extends Ip1, Ip2{
     void show(String ss);
}

public class ex0514 implements Ic{
      public void show(){
               show(" ");
       }
      public void show(String ss){
               System.out.println(ss+" num of Ip1 "+Ip1.num+" num of Ip2 "+Ip2.num);
       }

       public static void main(String[] argv){
 ex0514 obj=new ex0514();
 obj.show();
 obj.show(" Test ");
       }
}

abstract class Land{
        abstract double area();
 abstract double perimeter();
}

class Circle extends Land{
           double radius;

           Circle(double r){
       radius=r;
 }

 double area(){
                      return radius*radius*Math.PI;
 }

 double perimeter(){
                      return radius*2*Math.PI;
 }
}

class Square extends Land{
           double size;

           Square(double s){
       size=s;
 }

 double area(){
                      return size*size;
 }

 double perimeter(){
                      return size*4;
 }
}

class ex0514a{
 static public void main(String argv[]){
  Circle c = new Circle(5.6);    // generate a Circle object
                Square s = new Square(7.3);    // generate a Square object

                                // Output Circle's  area & perimeter (raduis is 5.6)
  System.out.println("Circle's area: "+c.area());
  System.out.println("Circle's perimeter: "+c.perimeter());
                                // Output Square's  area & perimeter (size is 7.3)
  System.out.println("Square's area: "+s.area());
  System.out.println("Square's perimeter: "+s.perimeter());
                }
}

dataB.txt

A9528003M168.5
A9528005F170.5
A9528006M185.5
A9528011M174.0
A9528012F157.0
A9528013M164.0
A9528017M177.0
A9528025F178.0
A9528028M184.0
A9528031M181.0

import java.io.*;

class ex0521a{
 public static void main(String[] args) throws IOException
 {

      FileReader fr=new FileReader("dataB.txt");     // fileA: dataB.txt
  BufferedReader bfr= new BufferedReader(fr);

  FileWriter fw = new FileWriter("reportB.txt");                   // output file: reportB.txt
  BufferedWriter bfw = new BufferedWriter(fw);

  String id,str,gen,height;
  double dheight;

  while ((str=bfr.readLine())!=null) //    read a record from fileA
  {
   id=str.substring(0,8);
   gen=str.substring(8,9);
   height=str.substring(9);
   dheight=Double.parseDouble(height);
   if(dheight >= 175.0) {
    System.out.println(id+"  "+gen+"  "+height);
    bfw.write(id+"  "+gen+"  "+height);
    bfw.newLine();
   }

  }
  bfw.flush();
  fr.close();
  fw.close();
 }
}





dataA.txt

A9528003;Mary Chen;75;82;65
A9528005;Roney Liu;86;62;75
A9528006;CoCo Wu;43;62;45
A9528011;Billy Kuo;95;88;93
A9528012;Johny Hu;72;66;65
A9528013;Chung LU;53;42;35
A9528017;Beer Lee;77;66;88
A9528025;Cool Hung;43;62;45
A9528028;Fly Wang;93;82;98
A9528031;Woody Lai;82;76;67

import java.io.*;

class score{
 double[] sc;
 score(double[] data){
  sc=data;
 }
 double getHigh(){
  double high=0;
  for(double d:sc)
   if(d>high) high=d;
  return high;
 }
 int passNo(){
  int sum=0;
  for(double d:sc)
   if(d>=60)sum++;
  return sum;
 }
}

class ex0521b{
 public static void main(String[] args) throws IOException
 {

      FileReader fr=new FileReader("dataA.txt");     // fileA: dataA.txt ==> 學生成績資料檔
  BufferedReader bfr= new BufferedReader(fr);
 
 //    將學號、成績1, 成績2, 成績3 及三科平均分數(*)、姓名
                 //     且產生平均最高分及平均及格人數寫入 fileB: report.txt  
                 // 
 //    String sc="94"
                 //     int x=Integer.parseInt(sc);      ==>    x=94;
                 //
  FileWriter fw = new FileWriter("report.txt");                   // output file: report.txt
  BufferedWriter bfw = new BufferedWriter(fw);
        //
        //    read first record 內容為學生人數 (成績筆數)
        //

  String name,id,str;
  int recno=0,isc1,isc2,isc3=0;
  double avg;
  double[] sc=new double[10];
  char star='*';

  while ((str=bfr.readLine())!=null) //    read a record from fileA
  {
   String[] token=str.split("[;]");
   id=token[0];
   name=token[1];
   isc1=Integer.parseInt(token[2]);
   isc2=Integer.parseInt(token[3]);
   isc3=Integer.parseInt(token[4]);
   avg=(int)(((double)isc1+isc2+isc3)/3.0*10)/10.0;
   if(avg<60) star='*';
   else star=' ';
   System.out.println(id+"  "+isc1+"  "+isc2+"  "+isc3+"  "+avg+"  "+name+star);
   sc[recno]=avg;
   recno++;
   bfw.write(id+"  "+isc1+"  "+isc2+"  "+isc3+"  "+avg+"   "+name+star);
   bfw.newLine();

  }
  score obj=new score(sc);
  System.out.println("最高分:"+obj.getHigh()+" 及格人數:"+ obj.passNo());
  bfw.write("最高分:"+obj.getHigh()+"及格人數:"+obj.passNo());
  bfw.newLine();
  bfw.flush();
  fr.close();
  fw.close();
 }
}



class Parent{
 int i;
 Parent(int i){
  this.i=i;
 }
 void show(){
  System.out.println(" i: "+i);
 }
}
class Child extends Parent{
 Child(){
  super(10);
 }
 Child(int i){
  super(i);
 }
}
class t0430{
 public static void main(String[] args) 
 {
  Parent obj=new Parent(99);
  obj.show();

  Child obj1=new Child(66);
  obj1.show();

  Child obj2=new Child();
  obj2.show();
 }
}


class score{
 int[] data;
 score(int[] d){    // build a constructor & set integer arrary as parameter
  data=d;
 }
 void sort(){
  int tmp;
  for(int i=0;i<data.length-1;i++){
   for(int j=i+1;j< data.length;j++){
    if(data[i] < data[j]){
     tmp=data[i];
     data[i]=data[j];
     data[j]=tmp;
    }
   }
  }
 }
}

class t0430a{
 public static void main(String[] args) 
 {
  int[] data={78, 54, 63, 89, 79, 46, 93, 81, 99, 50, 70, 66};
  for(int ss:data) System.out.print(" "+ss);
  System.out.println(" ");

  // instance an object
  // call the method of sort
  score s = new score(data);
  s.sort();

  for(int ss:data) System.out.print(" "+ss);
 }
}

assert實作

編譯為一樣javac xxxx.java 只是執行assert時須輸入 java -ea xxxx (沒加入-ea則不會有assert效果)
class assert1{
 public static void main(String[] args){
  int[] data={10,56,66,119,-5,30};
  int sum=0;
  for(int ss:data){
   assert(ss >= 100) : "data more than 100";
   assert(ss <= 0) : "data less than 0";
   sum+=ss;
  }
  System.out.println(" Sum:"+sum);
 }
}


package封裝實例

建立Circle.java和Square.java以及同目錄的Test資料夾
Circle.java
package Test;
public class Circle {
        double radius;

        public Circle(double r){
       radius=r;
 }

 public double area(){
                      return radius*radius*Math.PI;
 }

 public double perimeter(){
                      return radius*2*Math.PI;
 }
}
Square.java
package Test;
public class Square {
        double size;

        public Square(double s){
       size=s;
 }

 public double area(){
                      return size*size;
 }

 public double perimeter(){
                      return size*4;
 }
}
輸入指令 javac -d /Test Circle.java
輸入指令 javac -d /Test Square.java
將資料封裝在/Test/Test裡面並建立main.java在/Test裡(封裝資料夾外) 即可讀取
class main{
 static public void main(String argv[]){
  Test.Circle c = new Test.Circle(5.6);    // generate a Circle object
                Test.Square s = new Test.Square(7.3);    // generate a Square object

                                // Output Circle's  area & perimeter (raduis is 5.6)
  System.out.println("Circle's area: "+c.area());
  System.out.println("Circle's perimeter: "+c.perimeter());
                                // Output Square's  area & perimeter (size is 7.3)
  System.out.println("Square's area: "+s.area());
  System.out.println("Square's perimeter: "+s.perimeter());
                }
}

物件導向實例

以物件導向讀取student.class 實作test.java
class test {
 public static void main(String[] args){
  student std = new student();
  System.out.println("Name :"+std.getName());
  System.out.println("Age :"+std.getAge());
  System.out.println("Gender :"+std.getGen());

 }
}

物件導向設計原理期末考(I)


1. 將兩班成績分數透過切割函數,切割成小字串,整數字串轉成整數且存於整數陣列,
(a) 將整數陣列當作score建構方法參數,且產生一score物件。
(b) 再透過score物的成員方法完成題目的要求。
   class score包括:
一個資料成員:
int[] data;
  一個建構方法:
score(int[] dd)    // 設定int[] data初始值
兩個成員方法:
getLevelNum( base)     // 傳回整數 base (含)分數以上人數
getPassAvg() // 傳回及格成績的平均分數(小數後兩位)



class score{
 int[] data;

 score(int[] dd){
  data=dd;
 }
 int getLevelNum(int base){
  int num=0;

  for(int kk:data) 
   if(kk >= base) num++;
  return num;
 }

 double getPassAvg(){
  int sum=0, num=0;
  
  num=getLevelNum(60);
  for(int i:data) {
   if(i>=60) sum+=i; 
  }
  return (int)((double)sum/num*100)/100.0;
 }
}

class prob10507{
        public static void main(String[] args){

 String IMDA="IMDA,75,88,62,77,69,82,79,85,93,44,81,53,66,71";
 String IMDB="IMDB/55/68/72/57/83/77/93/75/66/85/83/47/52/87/96/53/62/89/76/51";
 int gradeA, gradeB, gradeC, gradeD,gradeF; 

        String[] token=IMDA.split("[,]");
 int[] data=new int[token.length-1];

 for(int i=1;i<token.length;i++)
  data[i-1]=Integer.parseInt(token[i]);

 score cls1=new score(data);
                gradeA=cls1.getLevelNum(90);
                gradeB=cls1.getLevelNum(80)-cls1.getLevelNum(90);
                gradeC=cls1.getLevelNum(70)-cls1.getLevelNum(80);
                gradeD=cls1.getLevelNum(60)-cls1.getLevelNum(70);
                gradeF=cls1.getLevelNum(0)-cls1.getLevelNum(60);
 System.out.println(" CLS Name: "+ token[0]);
 System.out.println("     Numbers of students: "+ (token.length-1));
 System.out.println("     Pass Average Number: "+cls1.getPassAvg());
 System.out.println("     grade A Number: "+gradeA);    // score >= 90
 System.out.println("     grade B Number: "+gradeB);    // score >= 80 and score < 90
 System.out.println("     grade C Number: "+gradeC);    // score >= 70 and score < 80
 System.out.println("     grade D Number: "+gradeD);   // score >= 60 and score < 70
 System.out.println("     grade F Number: "+gradeF);    // score < 60

        String[] token2=IMDB.split("[/]");
 int[] data2=new int[token2.length-1];

 for(int i=1;i<token2.length;i++)
  data2[i-1]=Integer.parseInt(token2[i]);

 score cls2=new score(data2);
                gradeA=cls2.getLevelNum(90);
                gradeB=cls2.getLevelNum(80)-cls2.getLevelNum(90);
                gradeC=cls2.getLevelNum(70)-cls2.getLevelNum(80);
                gradeD=cls2.getLevelNum(60)-cls2.getLevelNum(70);
                gradeF=cls2.getLevelNum(0)-cls2.getLevelNum(60);
 System.out.println(" CLS Name: "+ token2[0]);
 System.out.println("     Numbers of students: "+ (token2.length-1));
 System.out.println("     Pass Average Number: "+cls2.getPassAvg());
 System.out.println("     grade A Number: "+gradeA);
 System.out.println("     grade B Number: "+gradeB);
 System.out.println("     grade C Number: "+gradeC);
 System.out.println("     grade D Number: "+gradeD);
 System.out.println("     grade F Number: "+gradeF);
        }
}



2. (a) class degree 包括:
  一個建構方法:
degree( char, double)    // 設定degreeC, degreeF 初始值
兩個資料成員:
private: double degreeC, degreeF;
  四個成員方法:
private:  CtoF()    // degreeC  degreeF
private:  FtoC()    // degreeF  degreeC
public: getDegC()    // 傳回degreeC
public: getDegF()    // 傳回degreeF
(b) class check 繼承degree
  一個建構方法:
check(char, double)  //呼叫父類別之建構方法,設定degreeC, degreeF 初始值
有兩個成員方法:
public:  degChk()          // 傳回體溫狀態代碼(整數)
public:  toStatus(byte)    // 傳回體溫狀態(字串)
(c) 透過相關的成員方法完成題目要求(產業輸出內容)。

體溫、代碼與狀態對照表
~ 36.4c (97.5f)     -1 (Hypothermia) (體溫過低)
36.4c (97.5f) ~ 37.8c (100f)   0 (Normal) (正常)
37.8c (100.f) ~ 39.4c (103.0f)   1 (Fever) (發燒)
39.4c (103.0f) ~ 40.3c (104.5f)   2 (High Fever) (高燒)
40.3c (104.5f) ~               3 (Serious) (嚴重)



class degree{
 private double degC=0, degF=32;

 degree(char CF, double dd){
  if(CF=='C'){
   degC=dd;
   CtoF();
  }else if(CF=='F'){
   degF=dd;
   FtoC();
  }
 }
 private void CtoF(){
  degF=degC*5.0/9.0+32;
 }
 private void FtoC(){
  degC=(degF-32)/9.0*5.0;
 }
 double getDegC(){
  return degC;
 }
 double getDegF(){
  return degF;
 }
}

class check extends degree{
 check(char cc, double dd){
  super(cc,dd);
 }
  
 byte degChk(){               // if-else statement 
                double degC=getDegC();            // call getDegC to get degC
  if(degC < 36.4) return -1;
                else if(degC < 37.8) return 0;
                else if(degC < 39.4) return 1;
                else if(degC < 40.3) return 2;
                else return 3;

 }
 String toStatus(byte n){     // switch case statement
  switch(n){
  case -1:
   return "Hypothermia";
  case 0:
   return "Normal";
  case 1:
   return "Fever";
  case 2:
   return "High Fever";
  default:
   return "Serious";
  }
 } 
}
 
class prob20507{
        public static void main(String[] args){

  check c1 =new check('C',38.3);

 System.out.println(" degree C "+c1.getDegF());
 System.out.println(" degree F "+c1.getDegC());
 System.out.println("   Status code: "+ c1.degChk());
 System.out.println("   Degree Status: "+c1.toStatus(c1.degChk()));

 check c2 = new check('F',103.5);
 System.out.println(" degree C "+c2.getDegF());
 System.out.println(" degree F "+c2.getDegC());
 System.out.println("   Status code: "+ c2.degChk());
 System.out.println("   Degree Status: "+c2.toStatus(c2.degChk())); 
        }
}

第22次ITSA答案參考

題目連結: https://db.tt/tg3FeNrb (右鍵開新視窗)
1
#include<stdio.h>
void minheap(int *n[1000],int size){
int i;
while(1){
    int flag=1;
    for(i=1;i<=size;i++){
        if(n[i]>n[i*2+1]){int t; t=n[i],n[i]=n[i*2+1],n[i*2+1]=t; flag=0;}
        if(n[i]>n[i*2]){int t; t=n[i],n[i]=n[i*2],n[i*2]=t; flag=0;}
    }
    if(flag) break;
}

}

int main(){
int n[1000],size=0,num,i;
for(i=0;i<1000;i++) n[i]=500;
char order;
while(scanf("%c",&order)!=EOF){
    if(order=='a'){
        scanf("%d",&num);
        n[++size]=num;
        minheap(n,size);
        printf("The min-heap is of size %d and the current minimum is %d a\n",size,n[1]);
    }else if(order=='b'){
        n[1]=n[size];
        n[size]=500;
        --size;
        minheap(n,size);
        printf("The min-heap is of size %d and the current minimum is %d b\n",size,n[1]);
    }else if(order=='c'){
        for(i=1;i<=size;i++) {
            if(i!=1) printf(" ");
            printf("%d",n[i]);
        }
    }else if(order=='d'){
        break;
    }
}

return 0;
}

2
#include<stdio.h>
int n[90000],top=0,min=1e9;
int search(int s,int sum){
int ns,nsum,i;
if(s==top-1||s==top-2) { /* printf("*%d\n",sum)*/; if(sum<=min) min=sum; return 0;}

for(i=1;i<=3;i++){
    if((s+i)<top){
        //printf("i=%d s=%d sum=%d\n",i,s,sum);
        ns=s+i,nsum=sum+n[s+i];
        //printf("          n s=%d sum=%d,top=%d\n",ns,nsum,top);
        search(ns,nsum);

    }
}
    return 0;
}

int main(){
    int tmp;
    while(scanf("%d",&tmp)&&tmp) n[top++]=tmp;
    //while(scanf("%d",&tmp)!=EOF) n[top++]=tmp;
    search(0,n[0]);
    search(1,n[1]);
    printf("%d\n",min);
    return 0;
}

3
#include<stdio.h>
#include<string.h>
int n,map[5000][5000]={0},time[5000]={0},top=0;
int max=0;
void search(int mask,int sum,int size){
    if(size>=top) return;
    if(sum>max) max=sum;
    //printf("mask=%d sum %d size %d\n",mask,sum,size);
    int i,j;
    int max=0;
    for(i=0;i<top;i++){
        int ch=-1,max=0;
        for(j=0;j<top;j++){
            if(map[i][j]!=0&&(mask&(1<<j))&&(mask&(1<<i))){
                if(time[j]>max) max=time[j],ch=j;
            }
        }
        if(ch!=-1){
            mask-=1<<i;
            mask-=1<<ch;
            //printf(" (%d,%d) ",i,ch);
            search(mask,time[ch]+time[i],++size);
        }
    }




    return ;
}

void task (char t[100]){
    //printf("task\n");
    int c=0,tt=0,tn=0;
    while(t[++c]!=','){
        tt*=10;
        tt+=t[c]-'0';
    }

    while(t[++c]){
        tn*=10;
        tn+=t[c]-'0';
    }

    time[tt-1]=tn;
    top++;
    //printf("**task=%d time=%d\n",tt,time);

}

void prec (char p[100]){
    //printf("prec\n");
    int c=0,tb=0,ta=0;
    while(p[++c]!=','){
        tb*=10;
        tb+=p[c]-'0';
    }
    c++;
    while(p[++c]){
        ta*=10;
        ta+=p[c]-'0';
    }

    map[ta-1][tb-1]=1;
    //printf("  pp %d %d\n",tb,ta);
}

int main(){
    char input[100];
    int i,j;

    while(gets(input)){
        if(strcmp(input,"end")==0) break;
        char left[100],right[100]={0};
        int n1=0,n2=0;
        while(input[n1]!=':') left[n1]=input[n1],n1++;
        left[n1++]='\0';
        while(input[n1]) right[n2++]=input[n1++];
        right[n2]='\0';

        if(strcmp(left,"Process")==0){
            int sum=0,n3=0;
            while(right[n3]) sum*=10,sum+=right[n3++]-'0';
            n=sum;
            //printf("sum=%d\n",sum);
        }else if(strcmp(left,"Task")==0){
            task(right);
        }else if(strcmp(left,"Prec")==0){
            prec(right);
        }
    }

    /*for(i=0;i<top;i++) printf("%d ",time[i]);
    printf("  top=%d\n",top);

    for(i=0;i<top;i++){
        for(j=0;j<top;j++)
            printf("%d ",map[i][j]);
        puts("");
    }*/

    int mask=~(~0<<top);
    search(mask,0,0);
    printf("%d\n",max);
    return 0;
}

4
#include<stdio.h>
char ans[100][100];
int top=0;
int map[100][100],n,min=1e9;
int star,end;

int search(int a[n],int p,int size,int mask){
    int i,c;
    mask|=1<<p;
    a[size++]=p;

    if(size>=n) return 1;
/*
printf("p=%d size=%d mark=%d\n",p,size+1,mask);
for(i=0;i<size;i++) printf("%d ",a[i]);
puts("");*/
    if(p==end) {
        if(size<min){
            min=size;
            top=0;
            c=0;
            for(i=0;i<size;i++){
                if(i!=0) ans[top][c++]=',';
                ans[top][c++]=a[i]+'0';
            }
            ans[top++][c]='\0';
        }else if(size==min){
            c=0;
            for(i=0;i<size;i++){
                if(i!=0) ans[top][c++]=',';
                ans[top][c++]=a[i]+'0';
            }
            ans[top++][c]='\0';
        }
            /*printf("ans min=%d ",min);
            for(i=0;i<size;i++) printf("%d ",a[i]);
            puts("");*/

        return 0;
    }

    for(i=0;i<n;i++){
        if(map[p][i]==1&&(mask&(1<<i))==0)
            search(a,i,size,mask);
    }

}


int main(){
    scanf("%d,%d,%d",&n,&star,&end);
    int i,j;

    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&map[i][j]);

    int a[n];
    search(a,star,0,0);

    for(i=0;i<top;i++)
        printf("%s\n",ans[i]);

    return 0;
}

5
#include<stdio.h>
int main(){
while(1){
int n[100],top=0,num;
while(scanf("%d",&num)==1){
if(num==-999999) break;
n[top++]=num;
}
int i,j,max=n[0];
for(i=0;i<top;i++){
    int r=n[i];
    for(j=i+1;j<top;j++){
        r*=n[j];
        if(r>=max) max=r;
    }
}
printf("%d\n",max);
}
return 0;
}

第21次ITSA答案參考

題目連結:http://db.tt/dbfYqNFW (右鍵開新視窗)
1
#include<stdio.h>
int main(){
int n,sum=0,i,v=0,tmp;
scanf("%d",&n);
for(i=0;i<n;i++){
    scanf("%d",&tmp);
    if(tmp>=v) v=tmp;
    else {
        sum+=v-tmp;
    }
}
printf("%d\n",sum);
return 0;
}

2
#include<stdio.h>
int main(){
int m,n,k;
scanf("%d",&m);
while(m--){
    scanf("%d %d",&n,&k);
    int mark[n],i;
    for(i=0;i<n;i++) mark[i]=1;
    int sum=n-1,p=0,tmp=k;
    while(sum){
        if(mark[p]==1){

            p++;
            if(p>=n) p-=n;

            tmp--;
        }
        else{

            p++;
            if(p>=n) p-=n;

        }
        if(tmp==0){
            if(p-1>=0)
            mark[p-1]=0;
            else mark[p-1+n]=0;
            sum--;
            tmp=k;
        }

    }
    int ans;
    for(i=0;i<n;i++) if(mark[i]!=0) ans=i;
    char name[50];
    for(i=0;i<n;i++){
        scanf("%s",name);
        if(i==ans) printf("%s\n",name);
    }

}
return 0;
}

3
#include<stdio.h>
int main(){
int x1=0,b1,b2;
char input[100];
scanf("%s",input);
scanf("%d",&b1);
scanf("%d",&b2);
int i,flag=0,no;
for(i=0;input[i];i++){
    if(input[i]>='0'&&input[i]<='9') no=input[i]-'0';
    else if(input[i]>='A'&&input[i]<='F') no=input[i]-'A'+10;
    if(no>=b1) flag=1;
    x1*=b1;
    x1+=no;
}

char ans[100];
int n=0;
while(x1){
if(x1%b2>=10) ans[n]=x1%b2-10+'A';
else ans[n]=x1%b2+'0';
n++;
x1/=b2;
}

for(i=n-1;i>=0;i--) printf("%c",ans[i]);
puts("");

return 0;
}

4
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int top=1;
while(n-->1) top*=10;
int i;
for(i=1;i<top;i++){
    int t=i,sum=0,p=1;
    while(t){
    int tmp=t%10;
    t/=10;
    sum+=tmp;
    p*=tmp;
    }
    if(sum==p) printf("%d\n",i);
}
puts("");
return 0;
}

5
#include<stdio.h>
#include<math.h>
double dist (double x,double y,double a,double b){
return sqrt((x-a)*(x-a)+(y-b)*(y-b));
}

int main(){
int n;
int  x[100],y[100];
scanf("%d",&n);
int i,j;
double min=1e9;
for(i=0;i<n;i++) scanf("%d %d",&x[i],&y[i]);



for(i=0;i<n;i++)
    for(j=i+1;j<n;j++){
        //printf("(%d,%d)-(%d,%d) %f\n",x[i],y[i],x[j],y[j],dist(x[i],y[i],x[j],y[j]));
        if(dist(x[i],y[i],x[j],y[j])<=min&&i!=j) min=dist(x[i],y[i],x[j],y[j]);
    }

printf("%.4f\n",min);


return 0;
}