Java实验:第一次编写的Java程序
Java实验:第一次编写的Java程序
选修课老师讲的过于专业,没有完全消化,只有硬着头皮作下去了。
一周的时间,就编好了两道题目,已经筋疲力尽了。
第一题:
编程解决以下问题:
谁做的好事?有四位同学中的一位做了好事,不留名,表扬信来了之后,班长问这四位是谁做的好事。张三说:不是我,李四说:是王五,王五说:是卫六,卫六说:他胡说。已知三个人说的是真话,一个人说的是假话,现在要根据这些信息,找出做了好事的人。
package Exercise1;
/**
Write a description of class Student here.
Exercise 3 from lab01.txt
@author Windroc
@version 0.1 @2007.10.16
*/
public class Student
{
// instance variables - replace the example below with your own
private int x;/**
* Constructor for objects of class Student
*/
public Student()
{
// initialise instance variables
x = 0;
}/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public int sampleMethod(int y)
{
// put your code here
return x + y;
}public static void main(String[] args){
int a[][]=new int [4][4]; //条件数组
int i,j; //循环控制变量
int right;
int num=-1;
Student d=new Student();//初始化数组 for(i=0;i<=3;i++){ for(j=0;j<=3;j++){ a[i][j]=-1; } } //设置条件 a[0][0]=0; a[2][1]=1; a[3][2]=1; a[3][3]=0; //进行判断 right=d.Judge(a,0,0,1); if(right==1) num=0; right=d.Judge(a,2,1,0); if(right==1) num=1; right=d.Judge(a,3,2,0); if(right==1) num=2; right=d.Judge(a,3,3,1); if(right==1) num=3; switch(num){ case 0:{ System.out.println("张三说谎了"); d.FindPeople(a,0,0,1); break; } case 1:{ System.out.println("李四说谎了"); d.FindPeople(a,2,1,0); break; } case 2:{ System.out.println("王五说谎了"); d.FindPeople(a,3,2,0); break; } case 3:{ System.out.println("卫六说谎了"); d.FindPeople(a,3,3,1); break; } case -1:{ System.out.println("无法判断"); } } System.out.println("Program Done");
}
public int Judge(int[][] stu,int m,int n,int k){
int i,j;//循环控制变量
int old;//存储旧值
int flag=1; //是否矛盾
int numone=0; //1的个数
int row=-1; //1行的状态old=stu[m][n]; stu[m][n]=k; for(i=0;i<=3;i++){ row=-1; for(j=0;j<=3;j++){ switch(stu[i][j]){ case 1: numone++; if(numone>1) flag=0; if(row==0) flag=0; else row=1; break; case 0: if(row==1) flag=0; else row=0; break; } } } stu[m][n]=old; return flag;
}
public void FindPeople(int[][] stu,int m,int n,int k){
int i=0,j=0;
int right=-1;
int old;
old=stu[m][n];
stu[m][n]=k;
while((right==-1)&&(i<=3)){
for(j=0;j<=3;j++){
if(stu[i][j]==1) right=i;
}
i++;
}
stu[m][n]=old;switch(right){ case 0: System.out.println("张三做了好事"); break; case 1: System.out.println("李四做了好事"); break; case 2: System.out.println("王五做了好事"); break; case 3: System.out.println("卫六做了好事"); break; } }
}
第二题:
编程验证:
任意一个>1的自然数,对其进行一系列变换,变换法则如下:若这个自然数N不是素数,则把它分解成素因子的连乘积,然后将这些因子相加,并在其和数上再加1,记其结果为N1;如果N已经是素数,则把它加1作为N1。得到N1之后,再依此类推,得到N2,…。
结论:
A. 对于<=6的自然数,最后收敛必为6;
B. 对于>=7的自然数,最后收敛必为7和8的交替。
package Exercise2;
import java.math.*;
/**
- Write a description of class Number here.
- Exercise 5 grom lab01.txt
- @author Maraf
- @version V0.1@2007.10.18
[V0.2@2007.10.19](mailto:V0.2@2007.10.19)
*/
public class Number
{
// instance variables - replace the example below with your own
private int x;
/**
* Constructor for objects of class Number
*/
public Number()
{
// initialise instance variables
x = 0;
}
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public int sampleMethod(int y)
{
// put your code here
return x + y;
}
//判断是否是质数,质数返回0,和数返回1,0返回-1
public int IsPrime(int a){
int i;
int ans=0;
if(a==0) ans=-1;
for(i=2;i<=Math.sqrt(a);i++){
if(a%i==0){
ans=1;
break;
}
}
return ans;
}
//分解质因数
public int Factor(int a){
int sum=0;
int n=a;
int i;
Number tnum=new Number();
for(i=2;i<=n;i++){
while(n%i==0){
sum=sum+i;
n=n/i;
}
}
return sum;
}
//主程序
public static void main(String[] args){
final int N=20;
final int TIME=15;
int a[]=new int [N];
int i,j,n,t;
Number num=new Number();
System.out.println("Program Strated");
//初始化自然数组
for(j=0;j<N;j++){
a[j]=j+2;
}
//进行变换
for(j=0;j<N;j++){
System.out.println("数字 "+a[j]+" ");
for(i=1,n=a[j];i<=TIME;i++){
if(num.IsPrime(n)==0){
n=n+1;
}
else if(num.IsPrime(n)==1){
t=num.Factor(n);
n=t+1;
}
System.out.print(" "+n+" ");
//if(i%20==0) System.out.println("");
}
System.out.println("");
}
System.out.println("Program Done");
}
}