📄 javaexercise.java
字号:
/**
* 1,写出一个方法,打印出他的整数参数的罗马值表示形式。
* 比如,如果参数是1998则输出是MCMXCVIII
* 2,在下面的十进制算术问题中,十个不同字母的每一个代表着一个0~9中的数字,
* 写出一个程序发现所有可能的解决方案。
* MARK A=1 W=2 N=3 R=4 E=5 9147
* +ALLEN L=6 K=7 I=8 M=9 S=0 +16653
* ------- -------
* WEISS 25800
* */
public class JavaExercise {
public static void main(String args[]){
/** int b=5 ,c=8;
System.out.println("b=5\tc=8");
System.out.println("a= b++ + c++ ="+(b++ + c++ ));
System.out.println("b= "+b+"\tc= "+c);
System.out.println("a= b++ + ++c ="+(b++ + ++c ));
System.out.println("b= "+b+"\tc= "+c);
System.out.println("a= ++b + c++ ="+(++b + c++));
System.out.println("b= "+b+"\tc= "+c);
System.out.println("a= ++b + ++c ="+(++b + ++c));
System.out.println("b= "+b+"\tc= "+c);
System.out.println(true&&false||true);
int y;
int x=1;
int total=0;
while (x<=10){
y=x*x;
System.out.println(y);
total+=y;
++x;
}System.out.printf("Total is %d\n",total);
int count=1;
while(count<=10){
System.out.println(count%2==1?"****":"++++++++++++");
++count;
}
int row=10;
int column;
while(row>=1){
column=1;
while(column<=10){
System.out.print(row%2==1?"<":">");
++column;
}--row;
System.out.println();
}
int count;
for(count=1;count<10;count++){
if(count==8)break;
if(count==5)continue;
System.out.printf("%d",count);
}System.out.println("\nUsed countinue to skip printing 5");
System.out.printf("\nBroken out of loop at count = %d \n",count);
int n=1;
switch(n){
case 1:
System.out.println("The number is 1");
case 2:
System.out.println("The number is 2");
break;
default:
System.out.println("The number is not 1 or 2");
break;
}
double p=0;
double d=0;
double k=0;
int i=0;
do{
p+=4*Math.pow(-1, i)/(2*i+1);
k=p-d;
d=p;
System.out.println(p);
i++;
}while (Math.abs(k)>Math.pow(10, -5));
int i,j,k;
for(i=1;i<=5;i++){
for(j=1;j<=3;j++){
for(k=1;k<=4;k++)
System.out.print("*");
System.out.println();
}System.out.println();}
for(parameter:arrayname)
statement;
int array[]={
1,2,3,4,5
};
for(int value:array)//遍历数组的专用方法;
System.out.printf(" %d\n", value);
int[][] a=new int[4][4];
for(int[] i:a)
for(int j:i)
j=2;
for(int[] i:a)
{ for(int j:i)
System.out.print(j);
System.out.println();
}*/
//int i=5;
//System.out.println(Integer.toBinaryString(i));
System.out.println(binary(639));
}/**最大连续子数列之和的问题。
一个最大连续子数列之和的立方算法。
Cubic maximum contiguous subsequence sum algorithm.
seqStart and seqEnd represent the zctual best sequence
seqStart 与 seqEnd 可以设为实例变量。 */
private static int seqStart=0;
private static int seqEnd=0;
public static int maxSubsequenceSum1(int[] a){
int maxSum=0;
for(int i=0;i<a.length;i++)
for(int j=i;j<a.length;j++){
int thisSum=0;
for(int k=i;k<=j;k++)
thisSum+=a[k];
if(thisSum>maxSum){
maxSum=thisSum;
seqStart=i;seqEnd=j;
}
}return maxSum;
}
/**一个最大连续子数列之和的平方算法。
Quadratic maximum contiguous subsequence sum algorithm.
seqStart and seqEnd represent the actual best sequence
seqStart 与 seqEnd 可以设为实例变量。*/
public static int maxSubsequenceSum2 (int[] a){
int maxSum=0;
for(int i=0;i<a.length;i++)
{int thisSum=0;
for(int k=i;k<a.length;k++)
{ thisSum+=a[k];
if(thisSum>maxSum){
maxSum=thisSum;
seqStart=i;seqEnd=k;
}}
}return maxSum;
}
/**一个最大连续子数列之和的线性算法。
* Linear maximum contiguous subsequence sum algorithm.
* seqStart and seqEnd represent the actual best sequence
seqStart 与 seqEnd 可以设为实例变量。*/
public static int maximumSubsequenceSum(int[]a){
int maxSum=0;
int thisSum=0;
for(int i=0,j=0;j<a.length;j++)
{thisSum+=a[j];
if(thisSum>maxSum){
maxSum=thisSum;
seqStart=i;seqEnd=j;
}
else if(thisSum <0){
i=j+1;
thisSum=0;
}
}return maxSum;
}/**画刻度尺的递规方法*/
//Java code to draw roler
public class Graphics {
//用于画图的类
public void drawLine(int a,int b,int c,int d){
//用于画直线的方法
}
public void fillRect(int a,int b,int c,int d){
}
}
public static void drawRuler(Graphics g,int left,int right,int level){
if(level<1)return;
int mid=(left+right)/2;
g.drawLine(mid,80,mid,80-level*5);
drawRuler(g,left,mid-1,level-1);
drawRuler(g,mid+1,right,level-1);
}/**用于画分形星轮廓的代码*/
public static void drawFractal(Graphics g,int xCenter,int yCenter,int boundingDim){
int side=boundingDim/2;
if(side<1)return;
//compute corners
int left=xCenter-side/2;
int top=yCenter-side/2;
int right=xCenter+side/2;
int bottom=yCenter+side/2;
//Recursively draw four quadrants.
drawFractal(g,left,top,side);
drawFractal(g,left,bottom,side);
drawFractal(g,right,top,side);
drawFractal(g,right,bottom,side);
//Draw central square ,overlappint quadrants.
g.fillRect(left,top,right-left,bottom-top);
}
/**模运算,模幂
* return x^n(mod p)
* assumes x,n>=,p>0,x<p,0^0=1
* overflow may occur if p>31bits.
* */
public static long power(long x,long n,long p){
if(n==0)return 1;
long temp=power((x*x)%p,n/2,p);
if(n%2!=0)temp=(temp*x)%p;
return temp;
}/**最大公约数和乘法逆元*/
public static long gcd(long a,long b){
if(b==0)return a;
else return gcd(b,a%b);
}/**决定乘法逆元的程序*/
private static long x;
private static long y;
private static void fullGcd(long a ,long b){
long x1,y1;
if(b==0){
x=1;
y=0;
}else{
fullGcd(b,a%b);
x1=x;y1=y;
x=y1;y=x1-(a/b)*y1;
}
}public static long inverse(long a,long n)
{
fullGcd(a,n);return x>0?x:x+n;
}/**解决兑换问题的一个静态编程方法,通过计算从0到maxChange之间的所有的兑换情况,
*得出构造实际的硬币系列的信息
**/
public static void makeChange(int[] coins,int differentCoins,
int maxChange,int[] coinsUsed,int[] lastCoin){
coinsUsed[0]=0;lastCoin[0]=1;
for(int cents=1;cents<=maxChange;cents++){
int minCoins=cents;
int newCoin=1;
for(int j=0;j<differentCoins;j++){
if(coins[j]>cents)continue;
if(coinsUsed[cents-coins[j]]+1<minCoins){
minCoins=coinsUsed[cents-coins[j]]+1;
newCoin=coins[j];
}
}coinsUsed[cents]=minCoins;
lastCoin[cents]=newCoin;
}
}/**写一个递规方法用于返回N的二进制表示中的1的个数。可利用这样一个事实,
*即这个数等于N/2的二进制表示中的1的个数。
**/
public static int binary(int n){
if(n<=0)return 0;
else if(n==2)return 1;
else if(n%2==0)return binary(n/2);
else return binary(n/2)+1;
}
/**希尔排序*/
public static void shellsort(Comparable[] a){
for(int gap=a.length/2;gap>0;gap=gap==2?1:(int)(gap/2.2))
for(int i=gap;i<a.length;i++){
Comparable temp=a[i];
int j=i;
for(;j>=gap&temp.compareTo(a[j-gap])<0;j-=gap)
a[j]=a[j-gap];
a[j]=temp;
}
}/**归并排序*/
public static void mergeSort(Comparable[] a){
Comparable[] tempArray=new Comparable[a.length];
mergeSort(a,tempArray,0,a.length-1);
}private static void mergeSort(Comparable[] a,Comparable[] tempArray,int left,int right){
if(left<right){
int center=(left+right)/2;
mergeSort(a,tempArray,left,center);
mergeSort(a,tempArray,center+1,right);
merge(a,tempArray,left,center+1,right);
}
}private static void merge(Comparable[] a,Comparable[] tempArray,int leftPos,int rightPos,int rightEnd){
int leftEnd=rightPos-1;
int tempPos=leftPos;
int numElement=rightEnd-leftPos+1;
while(leftPos<=leftEnd&rightPos<=rightEnd)
if(a[leftPos].compareTo(a[rightPos])<0)
tempArray[tempPos++]=a[leftPos++];
else
tempArray[tempPos++]=a[rightPos++];
while(leftPos<=leftEnd)
tempArray[tempPos++]=a[rightPos++];
while(rightPos<=rightEnd)
tempArray[tempPos++]=a[rightPos++];
for(int i=0;i<numElement;i++,rightEnd--)
a[rightEnd]=tempArray[rightEnd];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -