1.收稅問題。
關注收稅區間段的起始部分,結束部分,及此區間的稅率;因爲收稅區間段都是每500$一個間隔且稅率也隨着收稅區間的提高每次加上0.01;因而很容易得到下面的循環累加程序。
package chapter3;
public class t1 {
public static float getTax(int income){
float taxRate=0.14f;
float tax=0;
int cur_taxed_range_start=2200;//表示當前收稅的區間段的開始部分
while(income>cur_taxed_range_start){
if(income>cur_taxed_range_start+500){
tax+=500*taxRate;
taxRate+=0.01;
cur_taxed_range_start+=500;
}
else{
tax+=(income-cur_taxed_range_start)*taxRate;
break;//跳出循環,不可能再到下一個收稅區間了
}
}
return tax;
}
public static void main(String args[]){
System.out.println(getTax(3400));
System.out.println(getTax(4000));
}
}
2.k階常係數線性遞歸函數定義的級數問題
An=C1*An-1+C2*An-2+……+CkAn-k+Ck+1;
其中,C1,C2,….,Ck+1爲實數,編寫一個程序,其輸入爲k,A1,…,Ak,C1,…,Ck+1和m,至少輸出爲A1至Am
代碼如下
package chapter3;
public class t2 {
public static int computeAn(int a[],int n,int c[]){
for(int i=1;i<c.length-1;i++){
a[n]+=c[i]*a[n-i];
}
a[n]+=c[c.length-1];
return a[n];
}
public static void main(String [] args){
int k=Integer.valueOf(args[0]);
int m=Integer.valueOf(args[2*k+2]);
int a[]=new int[m+1];
for(int i=1;i<=k;i++){
a[i]=Integer.valueOf(args[i]);
}
int c[]=new int[k+2];
for(int i=1;i<k+2;i++){
c[i]=Integer.valueOf(args[k+i]);
}
if(m>k){
for(int i=k+1;i<=m;i++){
computeAn(a, i, c);
}
}
for(int i=1;i<=m;i++){
System.out.print(a[i]+" ");
}
}
}
運行前進行配置,我實在myeclipse(eclipse類似),右擊在run as 選擇run configuration,進行如下配置
所以我的配置中設置k=4;a1,a2,a3,a4分別是1,2,3,4;c1到c5全爲1;m=8;
3.可以當個遊戲寫寫看,只要將26個字母分別圖形化表示即可。對於每個字母控制輸出的空格及及用於表示字母的基本符號的個數,還有行數等等
4.編寫處理如下日期問題的函數:給定兩個日期,計算兩者之間的天數;給定一個日期,返回值爲周幾;給定月和年,使用字符數組輸出該月的日曆
這裏偷了點懶,用了Date的getTime函數,其實完全可以自己寫的,但是有輪子不必自己造,Java甚至還有Calendar類,但是我發現使用有點問題就自己寫了。
package chapter3;
import java.util.Date;
public class t3 {
public static boolean judgeYear(int year){//如果是閏年返回true
if(( year%100!=0 && year%4==0 )||(year%400==0)){
return true;
}
return false;
}
public static int getMonthDays(int month){
switch (month) {
case 2:
return 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
public static void main(String [] args){
Date date1=new Date(2016,8,21);//假定知道2016年8月21日爲星期日
Date date2=new Date(2016,8,1);
long d1=date1.getTime();
long d2=date2.getTime();
long days;
long oneDayMil=1000*3600*24;
if(d1>d2)
days=(d1-d2)/oneDayMil;
else {
days=(d2-d1)/oneDayMil;
}
System.out.println(days);
int rest=(int) (days%7);
String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
if(d1-d2>oneDayMil){
rest=(7-rest)%7;//日期date2如果是前面的話,就需要倒着數,因此用7減一下,又怕剛好是前面的相差的七天整數倍,導致rest=0,從而數組下標溢出,所以對7取模
}
int year=date2.getYear();
int month=date2.getMonth();
int ds;
System.out.println(year+"-"+month+"-"+date2.getDate()+"是"+weeks[rest]);
if(month==2){
if(judgeYear(year)){
ds=29;
}
else {
ds=28;
}
}
else{
ds=getMonthDays(month);
}
System.out.println(year+"年"+month+"月");
System.out.println(" 07 01 02 03 04 05 06");
for(int i=0;i<rest*4;i++){
System.out.print(" ");
}
int count=rest;
for(int i=1;i<=ds;i++)
{ if(i<10)
System.out.print(" 0"+i+" ");
else {
System.out.print(" "+i+" ");
}
count++;
if(count==7){
System.out.println();
count=0;
}
}
}
}