亲宝软件园·资讯

展开

Java程序设计基础第4章习题与自总

最大上升空间 人气:0

怎么说呢?不论什么编程题,都有很多种方法解决问题,最后能解决我们所提出的问题才是关键的东西,也是未来成为工程师所需要的能力。解决问题是关键,

当我们做好了问题解决的关键途径的时候,如果有着profound idea 更好的提升代码与实际操作的情况那是更好的了。

对今天写的东西,如果要打个分的话一个C+吧太次了,考虑的东西还有许多欠缺。需要掌握的东西还有很多。精通一门语言不是一天两天的事情,一步一个脚印,一口一个大馒头,来充实自己。

package tincode;
import java.io.*;
import java.util.*;
/**
 *
 * @author Administrator
 */
public class Steven {
    public static void  main(String[] args) throws IOException
    {
        Steven st = new Steven();
        st.fct4_11();
    }
    //Fibonacci数列双元
    public void fct1()
    {
        int p=0,n=1;    //p代表前一个数,n代表后一个数
        System.out.println(p+""+n);
        for(int i =0;i<17;i++)  //前16项
        {
            n+=p;   
            p=n-p;
            System.out.println(n);
        }
    }
    //判断Fibonacci数,从键盘输入,判断是否; 暂时想不到更好的方法去查找是否斐波那契数列;
    public boolean fct2() throws IOException
    {
        int a = 0,b=1,n,num;
        String str;
        BufferedReader buf;
        buf = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("请输入一个正整数");
        str=buf.readLine();
        num = Integer.parseInt(str);
        while(b<num){
            n=a+b;
            a=b;
            b=n;
        }
        if(num==b){
            System.out.println(num+"是Fibonacci数");
            return true;
        }
        System.out.println(num+"不是Fibonacci数");
        return false;
    }
    
    //从键盘输入一个0~100之间的成绩,输出相应的等级,分为5个等级优、良、中、及格和不及格;
    public void fct4_1() throws IOException
    {
        String str;
        BufferedReader buf;
        buf = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("请输入成绩:");
        str = buf.readLine();
        int num = Integer.parseInt(str);
        num = num/10;
        switch(num){
            case 10:
            case 9:
                System.out.println("优");break;
            case 8:
                System.out.println("良");break;
            case 7:
                System.out.println("中");break;
            case 6:
                System.out.println("及格");break;
            default:
                System.out.println("不及格");break;
        }
        /*自我评测,虽然功能实现,但是如果出现输入1000、-22等这类不在范围的数值时,
        应该提示所输入成绩不在范围之内。在得到的输入值后面加入判断语句,以用来规范值域。
        */
    }
    //从键盘输入一个0~100之间的成绩,输出相应等级和上一个类似;
    // A 85~100,B 70~84,C 60~69,D 0~59;
    /*
    我有两种想法,1用所输入数值直接加5之后除10取整;2方法也差不多就是用四舍五入
    但是我后面一想好像都是一回事,愚蠢。暂时想到这一种;
    */
    public void fct4_2() throws IOException
    {
        String str;
        BufferedReader buf;
        buf = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("请输入成绩:");
        str = buf.readLine();
        int logic;
        int num = Integer.parseInt(str);
        num+=5;
        num = num/10;
        switch(num){
            case 10:
            case 9:
                System.out.println("A");break;
            case 8:
                logic = num>=85?1:2;
                //想到这我感觉我写不出来了,如果不加个判断我实在想不出有啥方法能给他分出来
                //然后我加了一个if
                if(logic==1){
                    System.out.println("A");break;
                }else if(logic==2){
                    System.out.println("B");break;
                }
                break;
            case 7:
                System.out.println("B");break;
            case 6:
                System.out.println("C");break;
            default:
                System.out.println("D");break;
        }
    }
    //编写一个程序,输出1~100之间所有既可以被3整除,又可被七整除的数。
    //这个没有限制条件,我先想到了直接用for循环和if条件判断。
    public void fct4_3(){
        for(int i=1;i<101;i++){
            if(i%3==0 && i%7==0){
                System.out.println(i);
            }
        }
    }
    
    //编写一个java应用程序,在键盘上输入数n,计算并输出1!+2!+...+n!的结果
    //我先想到了一个输入的n作为循环条件,阶乘的累加设一个sum,dup;
    public void fct4_4(){
        int n,sum=0,dup=1;
        System.out.print("请输入所求阶乘项数:");
        Scanner reader = new Scanner(System.in);
        n = reader.nextInt();
        for(int i=1;i<n+1;i++){
            dup*=i;
            sum+=dup;
        }
        System.out.println("和为"+sum);
    }
    //在键盘上输入数n,编程计算sum=1-1/2!+1/3!-...(-1)^(n-1)1/n!;
    //n,item,sum,一个像flag的-1判定值, for循环和if;
    public void fct4_5(){
        int n,dup=1,flag=-1;
        
        float item,sum=0;
        System.out.print("请输入一个整数:"); //缺少输入验证 
        //如果输入的数值不符合条件用do while循环操作
        Scanner reader = new Scanner(System.in);
        n = reader.nextInt();
        for(int i=1;i<n+1;i++){
            dup*=i;
            item=(float)Math.pow(flag,i-1)*1/dup; //原本想用个乘方运算的符号可是java里面好像没有用了pow。
            sum +=item;
        }
        System.out.print(sum);
    }
    //求出所有的水仙花数
    public void fct4_6(){
        int ge,shi,bai,sum;
        for(int i =101;i<1000;i++){
            ge = i%10;
            shi = i%100/10;
            bai = i/100;
            sum=ge*ge*ge+shi*shi*shi+bai*bai*bai;
            if(i==sum){
                System.out.println(i);
            }
        }
        //写完这个感觉写的好low,哈哈,用了太多空间,时间复杂度也很高毕竟
        //循环了所有的范围内,如果做一些算法可以减少很多浪费的时间,可以不用判断明显的数值比如111,222,333,444...等等
    }
    
    //从键盘输入一个整数,判断一个数是否是一完全数,所有因数包括1不包括自身的和等于该数自身的数。如28
    //我想了想应该是超过一半就一定不可匹配了。循环到自身一半就可以了。
    public void fct4_7(){
        int n,sum=0;
        System.out.print("请输入一个整数:");
        Scanner reader = new Scanner(System.in);
        n = reader.nextInt();
        for(int i=1;i<=n/2;i++){
            if(n%i==0){
                sum+=i;
            }
        }
        if(sum==n){
            System.out.print("是完全数");
        }else{
            System.out.print("不是完全数");
        }
    }
    //计算并输出一个整数各位数字之和。
    public void fct4_8(){
        int n,sum=0;
        System.out.print("请输入一个整数:");
        Scanner reader = new Scanner(System.in);
        n = reader.nextInt();
        System.out.print("输入的数值是"+n);
        do{
            sum+=n%10;
            n/=10;
        }while(n!=0);
        System.out.print("各位数字之和是"+sum);
    }
    
    //从键盘上输入一个浮点数,然后将该浮点数的整数部分和小树部分分别输出。
    public void fct4_9(){
        float n,decimal;
        int zhengshu;
        int pointIndex;
        System.out.print("请输入一个整数:");
        Scanner reader = new Scanner(System.in);
        n = reader.nextFloat();
        zhengshu=(int)n;
        decimal=n-zhengshu;
        System.out.println("zhengshu="+zhengshu+"小数是"+decimal);
        //方法二:转换成字符串,用方法split按小数点前后分割
        String str = String.valueOf(n);                   //将float类型转换成字符串
        String[] ary = str.split("\\.");            
        System.out.println(n + "整数部分为:" + ary[0]);
        System.out.println(n + "小数部分为:" + "0." + ary[1]);
        
        //方法三:同样转换成字符串,用方法indexOf标记小数点位置
        pointIndex = str.indexOf('.');
        System.out.println(n + "的整数部分为:" + str.substring(0,pointIndex));
        System.out.println(n + "的小数部分为:" + "0" + str.substring(pointIndex,str.length()));
        
        //https://blog.csdn.net/frozen122/article/details/111303303
        //看到这里还涉及到了一个正数和负数的问题。而且负数的整数部分和小数部分取还是不太一样的。
        //我还是缺失了很多东西啊!!
    }
    //设有一条长为3000m的绳子,每天减去一半,问需要几天时间,绳子的长度会短于5m;
    public void fct4_10(){
        int day=0;
        float length=3000;
        while(true){
            day++;
            length/=2;
            if(length<6){
                break;
            }
        }
        System.out.println("需要"+day+"天");
    }
    
    //输出一个左上三角,  1   3   6   10  15
  //                  2   5   9   14
  //                  4   8   13
  //                  7   12
  //                  11
    public void fct4_11(){
        //我堪称此操作为最骚操作;
        System.out.print("1   3   6   10  15\n" +
                        "2   5   9   14\n" +
                        "4   8   13\n" +
                        "7   12\n" +
                        "11\n");
        
        int i,j;    //i行,j列
        int stic,orgin=1; //初值;
        int liecha=2,hangcha=1; //行差值,列差值;
        for(i=5;i>0;i--){
            stic=orgin;
            for(j=i;j>0;j--){
                System.out.print(orgin+"    ");
                orgin+=liecha++;
            }
            System.out.println();
            liecha=2+hangcha;
            orgin=stic+hangcha++;
        }
    }
    //lie差和hang茶有差一的微妙关系利用这个微妙的关系,
    
}

 

加载全部内容

相关教程
猜你喜欢
用户评论