黑马测试题的做题心得

       在黑马报考环节里的有一道比较有意思的测试题,题目:

   

       小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)

 

       想要答对题目,首先必须得读懂题目,弄清楚出题者到底想要考我们社么知识点。首先,这道题要考我们C语法里的输入与输出相关知识,其次,要考我们对C语言算数运算的基础知识,还有一个简单的算法知识,如:判断是否闰年。当然,在编程里,可读性与精简性能够体现程序员的基本素质,所以,在完成答案写出自己的程序时,给出适当的注释,保持代码精简逻辑清晰是非常重要的。

      

        解题思路:先获取用户输入的日期,计算出输入的日期与2006年1月1日相差的总天数,如果能被2整除,说明小明认识了帅哥,如果能被3整除,说明小明认识了美女,如果能被2和3的倍数6整除,说明小明既认识了帅哥又认识了美女。

 

 

#include <stdio.h>

 

int leapYear(int);

int boyOrGirl(int, int, int);

 

int main(int argc, constchar * argv[]) {

   

    intyear,month,day;

   

    do

    {

        printf("请输入2006-1-1之后的任意一天,年月日之间以-隔开\n");

        scanf("%d-%d-%d",&year, &month, &day);

       

    } while(year<2006 || month<1 || month>12 ||day<1 || day>31);

   

    boyOrGirl(year,month,day);

    return0;

}

 

//是否是闰年

int leapYear(int year){

   

    int isLeap= 0;

   

    //不能被4整除的,不是闰年

    if (year%4 == 0)

    {

        if (year%100 == 0)

        {

            if (year%400 == 0)

            {

                //能被400整除的,是闰年

                isLeap = 1;

            }

        }else{

            //能被4整除,但不能被100整除的,不是闰年

            isLeap = 1;

        }

    }

    returnisLeap;

}

 

//判断结识的是帅哥还是美女,还是帅哥和美女都结识了

int boyOrGirl(year, month, day){

   

    intallday=0;

    intsumMonths[2][13]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

   

    //累加2006年到目标年之间的所有年的总天使

    for (int i = 2006; i< year; i++) {

       

        if(leapYear(i)){

            allday = allday+366;//闰年

        }else{

            allday = allday+365;//平年

        }

    }

   

    intisleapYear = leapYear(year);

   

    //累加目标年的1月份到目标月份之间的所有月份的总天数

    for(int j = 1; j< month; j++)

    {

        allday = allday +sumMonths[isleapYear][j];//是闰年则2月有29天

    }

   

    //防止用户输入的日数超出所在月该有的天数

    if(sumMonths[isleapYear][month]< day) day = sumMonths[isleapYear][month];

   

    //再加上天数

    allday += day;

   

    if(allday%6 == 0){

        printf("小明既认识了帅哥,又认识了美女\n");

    }elseif(allday%2 == 0){

        printf("小明认识的是帅哥\n");

    }elseif(allday%3 == 0){

        printf("小明认识的是美女\n");

    }else{

        printf("小明没有认识了帅哥,也没有认识了美女\n");

    }

   

    return0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值