1. 代码填空(满分3分)
以下程序打印出0~9的数字,请补充缺少的代码。
public class MyTest
{
public static void f(int begin, int end)
{
______ if(begin>end) return;
____________;
System.out.println(begin);
f(begin+1, end);
}
public static void main(String[] args)
{
f(0,9);
}
}
这个其实问的是递归函数的出口问题,每个递归函数都要有一个出口,这道题的出口就是判断begin是否比end大。
2. 代码填空(满分4分)
如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡,但也可以在不借助任何其它变量的情况下完成。试填写缺失的代码。
a = a ^ b;
b = _________;
a = _________;
a=a^b;
b=b^a;
a=a^b;
3. 代码填空(满分3分)
许多人都曾经玩过“拍七”游戏。规则是:大家依次从1开始顺序数数,数到含有7或7的倍数的要拍手或其它规定的方式表示越过(比如:7,14,17等都不能数出),下一人继续数下面的数字。违反规则者受罚。下面的程序模拟这个过程,拍7的情况输出“*”,请完善之。
for(int i=1; i<100; i++)
{
if(i % 7 == 0)
printf("*\n");
else if(___________________)
printf("*\n");
else
printf("%d\n", i);
}
else if(i/10==7 || i%10==7)//判断十位和个位上有没有包含7
4. 代码填空(满分5分)
下面的静态方法的目的是求出某个日期是该年度的第几天。试完善之。
如果传入:year=1980,month=1, day=1
则返回 1
如果传入:year=1980,month=2, day=1
则返回 32
public static int getDayOfYear(int year, int month, int day)
{
int [][]days=_____________________;
int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
int sum = day ;
for(int i=0;i<month;i++) {
sum += days[flag][i];
}
return sum;
}
public class MyDate {
public static int getDayOfYear(int year, int month, int day)
{
int [][]days=new int[][]{{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}};
int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
int sum = day ;
for(int i=0;i<month;i++) {
sum += days[flag][i];
}
return sum;
}
public static void main(String[] args) {
int l = getDayOfYear(1991, 2, 1);
System.out.println(l);
}
}
5. 代码填空(满分2分)
下列方法的目的是,找出1~n之间所有的平方数。试补全缺失的代码。
当n=10时,输出结果是:
1 4 9
当n=100时,输出结果是:
1 4 9 16 25 36 49 64 81
public static void showSqure(int n)
{
for(int i=0; i<n; i++)
{
for(int j=1; j<=i; j++)
{
if(i==_j*j____________) System.out.print(i + " ");
}
}
System.out.println();
}
6. 代码填空(满分9分)
(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
public static int f(int m, int n)
{
if(m==0) return 1;
if(n==0 || n==m) return 1;
return ___f(m-1,n-1)+f(m-1,n)
_______________________;
}
7. 代码填空(满分4分)
下面的代码将数组中的元素的位置颠倒过来:
比如:原来的元素是 [1,2,3]
则颠倒后变为:[3,2,1]
public static void reverse(int[] arrs)
{
for (int i = 0, j = arrs.length - 1; i <_________ ; i++, j--)
{
int temp = arrs[i];
arrs[i] = arrs[j];
arrs[j] = temp;
}
}
8. 程序设计(满分15分)
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
import java.util.Scanner;
public class T {
private int maxNum;
public T(int maxNum) {
this.maxNum = maxNum;
}
public void print() {
for (int i = 1; i <= maxNum; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j);
System.out.print("*");
System.out.print(i);
System.out.print("=");
System.out.print(i * j);
System.out.print("\t");
}
System.out.println();
}
}
public static void main(String[] args) {
System.out.print("录入一个整数:");
Scanner input = new Scanner(System.in);
// 没有考虑判断输入的是否是整数。
int maxNum = input.nextInt();
new T(maxNum).print();
}
}
9. 程序设计(满分9分)
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date d= new Date();
Date a = sf.parse("1949-10-11");
long x = d.getTime()-a.getTime();
System.out.println(x/1000/(24*60*60));
import java.util.Date;
import java.text.*;
import java.util.*;
public class time {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date d= new Date();
Date a= new Date();
Date a = sf.parse("1949-10-11");
Scanner input = new Scanner(System.in);
long x = d.getTime()-a.getTime();
System.out.println(x/1000/(24*60*60));
}
}
是调不通的。求解。。。
| 17楼 引用 杨婷的问问 (16楼) 如果是计算某一天距离1948-10-1日有多少天的话 也很简单 下面的代码: import java.util.Date; import java.text.*; import java.util.*; public class Date1{ public static void main(String[] args) { &n... 非常感谢、这个我们都没有学到呢、谢谢!!
|
#include <stdio.h>
struct date {
int year;
int month;
int day;
};
int main (void) {
int getDaysOfDate (struct date d);
struct date firstDate,secondDate;
int firstDays,secondDays;
printf ("Enter first date [yyyy mm dd]:");
scanf ("%i %i %i",&firstDate.year,&firstDate.month,&firstDate.day);
printf ("Enter second date [yyyy mm dd]:");
scanf ("%i %i %i",&secondDate.year,&secondDate.month,&secondDate.day);
firstDays=getDaysOfDate(firstDate);
secondDays=getDaysOfDate(secondDate);
printf ("Two date between the number days is: %i\n",secondDays-firstDays
);
return 0;
}
int getDaysOfDate (struct date d) {
int days;
if(d.month<=2) {
days=1461*(d.year-1)/4+153*(d.month+13)/5+d.day;
}else{
days=1461*d.year/4+153*(d.month+1)/5+d.day;
}
if(d.year>=1700&&d.month>=3&&d.day>=1 && d.year<=1800&&d.month<=2&&d.day
<=28) {
days=days+2;
}
if(d.year>=1800&&d.month>=3&&d.day>=1 && d.year<=1900&&d.month<=2&&d.day
<=28) {
days=days+1;
}
return days;
}
public static int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
} else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
while (gc1.before(gc2)) {
gc1.add(Calendar.DATE, 1);
elapsed++;
}
return elapsed;
}
public void main(String[] args) {
Calendar cal = Calendar.getInstance();
GregorianCalendar gc1 = new GregorianCalendar(2009, Calendar.JANUARY, 1);
GregorianCalendar gc2 = new GregorianCalendar(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DATE));
int days= getDays(gc1, gc2);
System.out.println(days);
}
10. 程序设计(满分20分)
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
#include <stdio.h>
#include <string.h>
#include<iostream.h>
//构造位运算结构。
//目的是减少内存占用。
//由于数据是五位数,所以按照位操作100000/8=12500,所以对应于12500即可。
char bit[12501];//用于记录数据,用bit来进行记录,1代表之前测试过这个数,但不一定输出过。
char bitPrintf[12501];//1代表以及输出。
char bitCurr[12501];//代表本次扩展访问的数的标注。
//设置bitCurr中的对应的位。
void setcbit(long t)//纪录t位
{
bitCurr[t>>3]|=(0x01<<(t&0x07));
}
//取得bitCurr标记中的对应t的那位状态
int getcbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bitCurr[arrindex]&(ch))//这是取得t/8对应的char的第t%8位数据
return 1;
else
return 0;
}
//设置bitPrint中的对应的位
void setbit(long t)
{
bit[t>>3]|=(0x01<<(t&0x07));
}
//取得标记中的对应t的那位状态
int getbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bit[arrindex]&(ch))//这是取得t/8对应的char 的第t%8位数据
return 1;
else
return 0;
}
void setpbit(long t)//纪录t位
{
bitPrintf[t>>3]|=(0x01<<(t&0x07));
}
//取得标记中的对应t的那位状态
int getpbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bitPrintf[arrindex]&(ch))//这是取得t/8对应的char 的第t%8位数据
return 1;
else
return 0;
}
//函数对num所能排列成的任何数据进行标记
//如若已经出现过,则返回0,否则返回1
int setFlag(long num)
{
return 1;
}
//排序,对分离的五位数字进行排序
void sort(int *b)
{
int t;
for(int i=0;i<5;i++)
{
for(int j=i+1;j<5;j++)
{
if(b[i]<b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
}
//根据当前的数据t,得到下一个数据
long getNextNumber(long t)
{
int b[5];
for(int i=0;i<5;i++)
{
b[i]=t%10;
t/=10;
}
sort(b);
long maxNum=b[0]*10000+b[1]*1000+b[2]*100+b[3]*10+b[4];
long minNum=b[4]*10000+b[3]*1000+b[2]*100+b[1]*10+b[0];
return maxNum-minNum;
}
//通过给定的一个数,可以搜索所有可以生成的数,并判断是否进入了五位圈
void findCyle(long t)
{
memset(bitCurr,0,sizeof(bitCurr));
while(getbit(t)==0)//找到下一个数
{
setbit(t);
setcbit(t);
t=getNextNumber(t);
}
if(getcbit(t)==1 && getpbit(t)==0)//这次访问,还没输出过,进入循环判断输出阶段
{
setpbit(t);
cout<<t<<endl;
while(1)//找到下一个数
{
t=getNextNumber(t);
if(getpbit(t)==0)
{
setpbit(t);
cout<<","<<t;
}
else
{
cout<<"]";
break;
}
}
}
}
int main()
{
int i;
memset(bit,0,sizeof(bit));//清空数据
//考虑到时间复杂度,对特殊数据进行了特殊处理
setpbit(11111);
setpbit(22222);
setpbit(33333);
setpbit(44444);
setpbit(55555);
setpbit(66666);
setpbit(77777);
setpbit(88888);
setpbit(99999);
setbit(11111);
setbit(22222);
setbit(33333);
setbit(44444);
setbit(55555);
setbit(66666);
setbit(77777);
setbit(88888);
setbit(99999);
cout<<endl;;
cout<<"please input the number:"<<endl;
cin>>i;
if(getbit(i)==0)//表明这个数还没进入任何一个圈,要进行判断
{
findCyle(i);
}
return 1;
}
import java.util.ArrayList;
import java.util.List;
public class CycleTest {
public static int computer(String str,List list){
int min = 0;
int max = 0;
int substraction = 0;
String s1 = "";
String s2 = "";
String s3 = "";
int[] a = new int[str.length()];
int[] b = new int[str.length()];
for(int i = 0 ;i < str.length(); i++){
int x = Integer.parseInt(str.charAt(i)+"");
a[i] = x;
b[i] = x;
}
for(int i = 0 ;i < a.length; i++){
for(int j = a.length - 1 ;j > i;j--){
if(a[j] < a[j - 1]){
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for(int i = 0 ;i < b.length; i++){
for(int j = b.length - 1 ;j > i;j--){
if(b[j] > b[j - 1]){
int temp = b[j];
b[j] = b[j - 1];
b[j - 1] = temp;
}
}
}
for(int i = 0;i < a.length;i++){
s2 += a[i]+"";
}
//Get the minimum
min = Integer.parseInt(s2);
// System.out.println(min);
for(int i = 0;i < b.length;i++){
s3 += b[i];
}
//Get the maximum
max = Integer.parseInt(s3);
// System.out.println(max);
substraction = max - min;
list.add(substraction);
for(int i = 0;i < list.size()-1; i++){
if((Integer)list.get(i) == substraction){
// System.out.println(list);
return 0;
}
}
s1 = (max - min)+"";
// System.out.println(list);
return computer(s1,list);
}
public static void main(String[] args) {
String s1 = "57238";
List list = new ArrayList();
computer(s1,list);
list.remove(list.size()-1);
System.out.println(list);
}
}
试试吧,我也是刚做的!
回答者: 哭淳 | 一级 | 2011-4-27 12:44
import java.util.Arrays;
public class MyTest10 {
public static void main(String args[])
{
int f=Sort(array(34256));
int x=Sort(array(34256));
for(int i=0;i<4;i++)
{
x=Sort(array(x));
System.out.print(x+" ");
}
}
static int []array(int n)
{
int a[]=new int[5];
int i=0;
int m=n;
while(i<5)
{
a[i]=m%10;
if(m%10==0)
a[i]=0;
m/=10;
i++;
}
return a;
}
static int Sort(int a[]){
Arrays.sort(a);
String min="";
for(int i=0;i<5;i++)
{
min=min+String.valueOf(a[i]);
}
int Min=Integer.parseInt(min);
StringBuffer sb=new StringBuffer(min).reverse();
String max=new StringBuffer(sb).toString();
int Max=Integer.parseInt(max);
int c=Max-Min;
return c;
}
}
11. 程序设计(满分 9 分)
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如,卡号是:5432123456788881
则奇数、偶数位(用红色标出)分布:5432123456788881
奇数位和=35
偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70 可以被10整除,认定校验通过。
请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
比如,用户输入:356827027232780
程序输出:成功
题目:当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 |
|
|