Java基础编程50题(下)

【程序26】 
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 

1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 

import java.util.Scanner;

public class aufgabe26 {
private String day;

aufgabe26 (String day)
{
	this.day=day.toUpperCase();
}

void judgement()
{
	switch(this.day.charAt(0)){
	case 'M':
		System.out.println("today is Monday");break;
	case 'T':
	{
		if(this.day.charAt(1)=='U')
			System.out.println("today is Tuesday");
		else if(this.day.charAt(1)=='H')
			System.out.println("today is Thursday");
		else
			System.out.println("flase input");
	}break;
		
	case 'W':
		System.out.println("today is Wednesday");break;
	case 'F':
		System.out.println("today is Friday");break;
	case 'S':
	{
		if(this.day.charAt(1)=='A')
			System.out.println("today is Saturday");
		else if(this.day.charAt(1)=='U')
			System.out.println("today is Sunday");
		else
			System.out.println("flase input");
	}break;
	default:
		System.out.println("flase input");
	}
	
}
public static void main(String[] args)
{
	System.out.println("please input a weekday");
	 Scanner sc = new Scanner(System.in);
	 String i=sc.nextLine();
	 aufgabe26 test=new aufgabe26(i);
	 test.judgement();
	 sc.close(); 
}
}


结果吻合。


【程序27】 

题目:求100之内的素数 

public class aufgabe27 {
public static void main(String[] args)
{
	int sum=0;
	for(int i=1;i<=100;i++)
	{
		int count=0;
		for(int j=1;j<=i;j++)	
			if(i%j==0)
				count++;
		if(count==2)
		{
			sum++;
			System.out.println(i+" is prime.");
		}
			
	}
	System.out.println("there are "+sum+" prime numbers in [1,100].");
}
}


结果吻合。



【程序28】 
题目:对10个数进行排序 
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第

二个元素与后8个进行比较,并进行交换。 

注:此处替换为使用快速排序算法实现。

public class aufgabe28 {
private int[] com;

aufgabe28(int[] com)
{
	this.com=com;
}

void QuickSort(int start,int end)
{
	if(start>=end) 
		return ;
		
	int i=start;
	int j=end;
	int pivot=this.com[(start+end)/2];
	System.out.println(" original index : "+i+" "+j+" "+pivot);
	
		while(true)
		{
			while(this.com[i]pivot)
				{
				System.out.println("com["+j+"] ="+this.com[j]+" is bigger than pivot");	
				j--;
					if(i==j)
						break;
				}
			if(this.com[i]!=this.com[j])
				swap(i,j); 
			else
				i++;
			if(i>=j) break;
			System.out.println("swap "+this.com[i]+" "+this.com[j]);	
		}
		System.out.println("the new partition is  [ "+start+", "+(j-1)+" ] , ["+(j+1)+", "+end+" ]");
	QuickSort(start,j-1);
	QuickSort(j+1,end);
}

void swap(int old,int neu)
{
	int temp=this.com[old];
	this.com[old]=this.com[neu];
	this.com[neu]=temp;
}

void show()
{
	for(int i=0;i


结果吻合。


【程序29】 
题目:求一个3*3矩阵对角线元素之和 

1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 

public class aufgabe29 {
public static void main(String[] args)
{
	int[] input=new int[9];
	Scanner scr=new Scanner(System.in);
	System.out.println("please input 9 numbers:");
	for(int i=0;i


结果吻合。


【程序30】 
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,

依次后移一个位置。 

public class aufgabe30 {
private int[] arr;
private int neu;
private int[] sarr;

aufgabe30(int[] arr,int neu)
{
	this.arr=arr;
	this.neu=neu;
	this.sarr=new int[arr.length+1];
}

void insert()
{
	int flag=1;
	for(int i=0,j=0;j



结果吻合。



【程序31】 
题目:将一个数组逆序输出。 

1.程序分析:用第一个与最后一个交换。 

public class aufgabe31 {
private int[] arr;

aufgabe31(int[] arr)
{
	this.arr=arr;
}

void swap(int i,int j)
{
	int temp=this.arr[i];
	this.arr[i]=this.arr[j];
	this.arr[j]=temp;
}
void ArraySwap()
{
	for(int i=0,j=(this.arr.length-1);i<=j;)
	{
		swap(i,j);
		i++;
		j--;
	}
}
void show()
{
	for(int i=0;i


结果吻合。


【程序32】 
题目:取一个整数a从右端开始的4~7位。 
程序分析:可以这样考虑: 
(1)先使a右移4位。 
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4) 

(3)将上面二者进行&运算。 

public class aufgabe32 {
private int a;
private int[] digit;
private int start;
private int end;

aufgabe32(int a,int start,int end)
{
	this.a=a;
	digit=new int[end-start+1];
	this.start=start;
	this.end=end;
}

void DigitExtract()
{
	for(int i=start;i<=end;i++)
	{
		digit[i-start]=(a>>i) & 0x1;
	}
}
void show()
{
	for(int i=digit.length-1;i>=0;i--)
	{
		System.out.print(digit[i]+" ");
	}
	System.out.println();
}
public static void main(String[] args)
{
	int a=144;
	int start=4;
	int end=7;
	System.out.println("original digits :");
	aufgabe32 test1=new aufgabe32(a,0,32);
	test1.DigitExtract();
	test1.show();
	System.out.println("digits von "+start+" to "+end+" is :");
	aufgabe32 test=new aufgabe32(a,start,end);
	test.DigitExtract();
	test.show();
}
}

结果吻合。

【程序33】 
题目:打印出杨辉三角形(要求打印出10行如下图) 
1.程序分析: 

1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 

1 5 10 10 5 1 

public class aufgabe33 {
private int row;

aufgabe33(int row)
{
	this.row=row;
}

int factor(int n)
{
	if(n==0)
		return 1;
	else
		return n*factor(n-1);
}

int Binomial(int a,int b)
{
		return factor(a)/(factor(b)*factor(a-b));
}

void show()
{
	for(int i=0;i<=this.row;i++)
	{
		for(int j=0;j<=i;j++)
		{
			System.out.print(Binomial(i,j)+" ");
		}
		System.out.println();
	}
}
public static void main(String[] args)
{
	int row=5;
	aufgabe33 test=new aufgabe33(row);
	test.show();
}
}


结果吻合。


【程序34】 

题目:输入3个数a,b,c,按大小顺序输出。 

public class aufgabe34 {
private char[] com;
private int num;
private int pos;

aufgabe34(int num)
{
	this.num=num;
	com=new char[num+1];
	this.pos=0;
}

void AddandSort(char ch)
{
	for(int i=0;i<=this.pos;i++)
	{
		if(com[i]>ch)
		{
			for(int j=(this.pos);j>i;j--)
				swap(j,j-1);
			com[i]=ch;
			break;  //仅在第一个大于ch的位置插入即可。
		}
		else if(this.com[i]==0)
			this.com[i]=ch;
	}
	this.pos++;
}
void swap(int i,int j)
{
	char temp=this.com[i];
	this.com[i]=this.com[j];
	this.com[j]=temp;
}
void show()
{
	System.out.println("the sorted characters are :");
	for(int i=0;i<=this.pos;i++)
		System.out.print(this.com[i]+" ");
	System.out.println();
}
public static void main(String[] args)
{
	System.out.println("please input the numbers of to be compared characters ");
	Scanner scc=new Scanner(System.in);
	int num=scc.nextInt();
	Scanner sc=new Scanner(System.in);
	aufgabe34 test=new aufgabe34(num);
	System.out.println("please add the to be compared characters ");
	while(sc.hasNext())
	{
		char ch=sc.nextLine().charAt(0);
		test.AddandSort(ch);
		test.show();
	}
	
}
}



1.程序分析:利用指针方法。 
【程序35】 

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 

public class aufgabe35 {
private int[] arr;
private int[][] mm;

aufgabe35(int[] arr)
{
	this.arr=arr;
	this.mm=new int[2][2];
}
void swap(int i,int j)
{
	int temp=this.arr[i];
	this.arr[i]=this.arr[j];
	this.arr[j]=temp;
}
void FindMM()
{
	mm[0][0]=this.arr[0];  //比较之前要先赋一个需参与比较的值,以免初始化数值影响比较结果
	mm[0][1]=0;
	mm[1][0]=this.arr[0];
	mm[1][1]=0;
	for(int i=0;imm[1][0])
		{
			mm[1][0]=this.arr[i];
			mm[1][1]=i;
		}
	}
}

void Exchange()
{
	FindMM();
	swap(0,mm[1][1]);
	swap((this.arr.length-1),mm[0][1]);
}
void show()
{
	for(int i=0;i



【程序36】 

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 

public class aufgabe36 {
private int[] arr;
private int offs;
private int[] temp;
private int flag;

aufgabe36(int[] arr,int offs)
{
	this.arr=arr;
	this.offs=offs;
	temp=new int[this.arr.length];
	flag=0;
}

void Cycle()
{
	for(int i=0;i



【程序37】 
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下

的是原来第几号的那位。 

public class aufgabe37 {
private int sum;
private int[] arr;

aufgabe37(int sum)
{
	this.sum=sum;
	arr=new int[sum];
}

void game()
{
	int length=sum;
	int count=0;
	for(int i=0;length>1;i++)
	{
		if(this.arr[i%this.arr.length]!=1)
			{
				count++;
				System.out.println("the "+(i%this.arr.length)+"th people count No."+count);
			}
		if(count==3)
		{
			this.arr[i%this.arr.length]=1;
			length--;
			count=0;
			System.out.println("the "+(i%this.arr.length)+"th people out , "+"left "+length+" people.");
		}
	}

}
void show()
{
	for(int i=0;i



【程序38】 

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 

public class aufgabe38 {
private String str;

aufgabe38(String str)
{
	this.str=str;
}
int GetLength()
{
	return str.length();
}
public static void main(String[] args)
{
	Scanner sc=new Scanner(System.in);
	System.out.println("please input the String");
	String str=sc.nextLine();
	aufgabe38 test=new aufgabe38(str);
	System.out.println("the length is "+test.GetLength());
	sc.close();
}
}



【程序39】 
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数

1/1+1/3+...+1/n(利用指针函数) 

public class aufgabe39 {
private int flag;

aufgabe39(double n)
{
	flag=(int)n%2;
}

double SumAll(double n)
{
	
	if(n==2 && flag==0)
		{
		System.out.println("1/"+n+"=");	
		return 1/2;
		}
	else if(n==1 && flag==1)
		{
		System.out.println("1/"+n+"=");
			return 1;
		}
	else
		{
			System.out.print("1/"+n+"+");
			return 1/n+SumAll(n-2);
		}
}
public static void main(String[] args)
{
	Scanner sc=new Scanner(System.in);
	System.out.println("please input the number");
	double n=sc.nextDouble();
	aufgabe39 test=new aufgabe39(n);
	System.out.println("the sum is "+test.SumAll(n));
	sc.close();
}
}



【程序40】 

题目:字符串排序。 

public class aufgabe40 {
private String s1;
private String s2;

aufgabe40(String s1,String s2)
{
	this.s1=s1;
	this.s2=s2;
}
String compare()
{
	for(int i=0;is2.charAt(i))
			return s2;
	}
	return s1+" == "+s2;
}
public static void main(String[] args)
{
	String s1="abcde";
	String s2="accde";
	aufgabe40 test=new aufgabe40(s1,s2);
	System.out.println("the smaller String is : ");
	System.out.println(test.compare());
}
}



【程序41】 
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一
个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中

,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 

public class aufgabe41 {

static int Divide(int a)
{
	int sum=a;
	int flag=0;
	while((a-1)%5 == 0 && flag<5)
	{
		a=(a-1)/5*4;
		flag++;
	}
	if(flag==5)
		return sum;
	else
		return -1;
	
}
public static void main(String[] args)
{
	for(int i=0;i<10000;i++)
	{
		if(aufgabe41.Divide(i)!=-1)
		{
			System.out.println("there are at least "+aufgabe41.Divide(i)+" peaches at first.");
			break;
		}
	}
}
}



【程序42】 
题目:809*??=800*??+9*??+1 

其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 

public class aufgabe42 {
public static void main(String[] args)
{
	for(int i=10;i<100;i++)
	{
		int a=800*i;
		int b=9*i;
		if(809*i == (a+b+1) && (a/100)>=10 && (a/100)<100 && b>=100 && b<1000 )
		{
			System.out.println(i);
			break;
		}
			
	}
	System.out.println("can't find it ");
}
}



【程序43】 

题目:求0—7所能组成的奇数个数。 

public class aufgabe43 {
	
static int factor(int n)
{
	if(n==0)
		return 1;
	else
		return n*factor(n-1);
}

static int A(int n,int m)
{
	return factor(n)/factor(n-m);
}

static int BioSum(int n)
{
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		sum=sum+A(n,i)-A((n-1),(i-1));
	
	}
	return sum*4+4;
}

public static void main(String[] args)
{
	int num=7;
	System.out.println(aufgabe43.BioSum(num));
}
}



【程序44】 

题目:一个偶数总能表示为两个素数之和。 

public class aufgabe44 {
private int even;
aufgabe44(int even)
{
	this.even=even;
}
boolean Prime(int a)
{
	for(int i=2;i


结果吻合。


【程序45】 

题目:判断一个素数能被几个9整除 

public class aufgabe45 {
private int range;
private int sum;
aufgabe45(int range)
	{
		this.range=range;
		sum=0;
	}
boolean Prime(int a)
{
	for(int i=2;i


【程序46】 

题目:两个字符串连接程序 

public class aufgabe46 {
	public static void main(String[] args)
	{
		String s1="abv";
		String s2="frg";
		String s3=s1+s2;
		System.out.println(s3);
	}
}


【程序47】 

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 

public class aufgabe47 {
static void Draw(int n)
{
	for(int i=0;i


【程序48】 
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字

都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 

public class aufgabe48 {
private int code;
private int[] digit;
aufgabe48(int code)
{
	this.code=code;
	digit=new int[4];
}
void Encode()
{
	
	for(int i=1;i<5;i++)
	{
		digit[(i-1)]=this.Translate( (int)(this.code/Math.pow(10,i-1) ) %10);
	}
	DigitSwap(1,4);
	DigitSwap(2,3);
	
}
void DigitSwap(int i,int j)
{
	int temp=this.digit[i-1];
	this.digit[i-1]=this.digit[j-1];
	this.digit[j-1]=temp;
}
int Translate(int n)
{
	System.out.println("the input digit is "+n+",the encoded digit is "+((n+5)%10));
	return (n+5)%10;
}
void show()
{
	System.out.println("the original number is "+this.code);
	System.out.print("the encoded number is ");
	for(int i=0;i


结果吻合。

【程序49】 
题目:计算字符串中子串出现的次数 
【程序50】 
题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算
出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

你可能感兴趣的:(Java基础编程50题(下))