java第五次作业
2013-04-19 12:01
288 查看
1.假帐克星-- Benford's Law
输入:
数据文件(filesize.txt,某文件存储设备上各种文件的尺寸),里面包含很多整数数据,每个数据占一行。
输出:
数字1-9打头的数据所占的比例。为了便于自动检查结果。请使用格式化输出,格式化字符串为
"%d: %6.1f%%\n"
其中第一个参数为数字1-9,第二个参数为对应的百分比。
public class Main{ public static void main(String[] args) { int []num = new int[9]; int count = 0; while(!StdIn.isEmpty()){ String str = StdIn.readLine(); int t = Integer.parseInt(str); while(t >= 10){ t = t / 10 ; } num[t - 1] = num[t - 1] + 1; count++; } for (int i = 0; i < 9; i++) { StdOut.printf("%d: %6.1f%%\n", i+1 , 100.00*num[i] / count); } } }
2.阅历卡片
输入:
需要输出的年、月
输出:
对应的月历卡片。第一行为标题,年份用数字,月份用中文输出。第二行是星期几,请按照样例输出的格式输出。接下来的各行是日期,需要进行相应的对齐。注意,因为中文编码的关系,建议使用StdIn和StdOut进行输入输出操作。
import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int year = input.nextInt(); int month = input.nextInt(); //当前月是星期几 GregorianCalendar gregorianCalendar = new GregorianCalendar(year, month - 1, 1); int firstDayofWeek = gregorianCalendar.get(Calendar.DAY_OF_WEEK) - 1; //当前月的最大天数 int monthMaxDayNum = gregorianCalendar.getActualMaximum(Calendar.DATE); String[] arrayOfMonth = { "", "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" }; StdOut.println(" " + year + "年" + arrayOfMonth[month]); StdOut.println("日 一 二 三 四 五 六"); for (int nullno = 0; nullno < firstDayofWeek; nullno++) { StdOut.print(" "); } int j = 1; for (int i = firstDayofWeek; i <=6; i++,j++) { StdOut.printf("%2d ", j); } StdOut.println(); // 循环输出该月日期 for (int i = j,k = 1; i <= monthMaxDayNum; i++,k++) { StdOut.printf("%2d ", i); if (k % 7 != 0 && i!=monthMaxDayNum) { continue; }else{ StdOut.println(); } } } }
3.病毒扩散模型
输入:
参数K和T,以及用起始时刻ts,终止时刻te和增量dt表示的一个时间区间[ts,te)。包含ts,但不含te。
输出:
对应各个时刻点的感染个体的比例,用空格进行分隔,每10个数据后换行。最后一行如果不够10个数据也要换行。(补充:可能出现(te-ts)/dt不是整数的情形,要注意是否应该取最后那个点)
输出数据请采用格式化字符串" %4.3f",即每个数据之前放置一个空格,数据保留小数点后三位有效数字
public class Main { public static void main(String[] args) { double k = StdIn.readDouble(); double t = StdIn.readDouble(); int ts = StdIn.readInt(); int te = StdIn.readInt(); double dt = StdIn.readDouble(); double tts = ts; int i = 1; for (; tts < te; i++) { double result = Math.exp(k * (tts - t)) / (1 + Math.exp(k * (tts - t))); StdOut.printf(" %4.3f", result); if (i % 10 == 0 ) { StdOut.println(); } tts = ts + i * dt; } if ((i-1) % 10 != 0) { StdOut.println(); } } }