键盘输入一个数number,输出从1到number的所有奇数和偶数

最近看到一个题,键盘输入一个数number,输出从1到number的所有奇数和偶数,有好几种算法

一、

取余+集合算法输出:

 1 package com.company;
 2
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 import java.util.Scanner;
 8
 9 public class Test3 {
10
11     private int total;
12     private int even = 0;
13     private int odd = 0;
14
15     public void getNumber(int number) {
16         Map map = new HashMap();
17         List list1 = new ArrayList();
18         List list2 = new ArrayList();
19
20         for (int i = 0; i <= number; i++) {
21             if (i % 2 == 0) {
22                 //even = even + i;
23                 list1.add(i);
24             } else {
25                 //odd = odd + i;
26                 list2.add(i);
27             }
28         }
29         System.out.println("1-" + number + "范围之间的偶数有:" + list1.toString() + "偶数和为:" + even);
30         System.out.println("1-" + number + "范围之间的奇数有:" + list2.toString() + "奇数和为:" + odd);
31
32     }
33
34     public static void main(String[] args) {
35         Scanner sc = new Scanner(System.in);
36         System.out.println("请输入一个整数:");
37         int number = sc.nextInt();
38         long starttime = System.currentTimeMillis();
39         Test3 t = new Test3();
40         t.getNumber(number);
41         long endtime = System.currentTimeMillis();
42         System.out.println("运行时间:" + (endtime - starttime) + "ms");
43     }
44 }

以上这种算法在数据为10万情况下,测得运行时间为852ms

二、位运算+集合

package com.company;

import java.util.ArrayList;
import java.util.Scanner;
public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int number=sc.nextInt();
        ArrayList list1  = new ArrayList();
        ArrayList list2  = new ArrayList();
        //int[] a =new int[number];
        long starttime = System.currentTimeMillis();
            for (int i = 0; i < number; i++) {
                if((i&1)==1){
                    list1.add(i);

                }else{
                    list2.add(i);
                }
            }
        System.out.println("奇数!"+list1.toString()+"\n"+"偶数!"+list2.toString());
        long endtime = System.currentTimeMillis();
        System.out.println("运行时间:"+(endtime-starttime)+"ms");
    }
}

以上这种算法在数据为10万情况下,测得运行时间为714ms

三、StringBulider+单层for循环

package com.company;

import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int number = sc.nextInt();
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2 = new StringBuilder();
        long starttime = System.currentTimeMillis();
        for (int i = 0; i < number; i += 2) {
            s1.append(i).append(",");
            s2.append(i+1).append(",");
        }
        System.out.println("奇数是:"+s1);
        System.out.println("偶数是:"+s2);
        long endtime = System.currentTimeMillis();
        System.out.println("运行时间:"+(endtime-starttime)+"ms");
    }
}

以上这种算法在数据为10万情况下,测得运行时间为423ms

可以看出  如果只是输出,还是字符串拼接效率最高。

--------本人初学者,欢迎评论区大佬留言-------------

原文地址:https://www.cnblogs.com/run-forrest-gump/p/12547499.html

时间: 2024-10-11 13:26:47

键盘输入一个数number,输出从1到number的所有奇数和偶数的相关文章

3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /* * 3.键盘输入10个数,放到数组中 (1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中 */ public class Test3 { public static int[] arr = new int[10]; public static void

44.从键盘输入12个数存入二维数组a[3][4]中,编写程序求出最大元素的值及它所在的行号和列号

//1.建立二维数组 //2.运用循环,将内容输入到数组中 //3.求出最大元素,并输出行号和列号 #include<iostream> using namespace std; int main() { int a[3][4]; int Max=0;//赋值之前需要先置为0 cout<<"please input 12 numbers: "<<endl; for(int i=0;i<3;i++)//嵌套循环,用于向二维数组中输入内容 { fo

输入N个数,输出所有可能的排列组合(6+个小时啊,耶稣~)

输入N个数,输出所有可能的排列组合 一行代码一行泪...手都被发热的笔记本烤的不舒服了....6个多小时过去鸟...终于粗来鸟.... 昨天同学问到一个排列组合的问题,本身不会很难,原题是固定输入4个数字,例如1 2 3 4,输出所有可能的排列组合 暴力的话应该不难的.代码+debug,半个小时. 如果是输入N个数字呢? 先说简单的暴力方法,如果输入4个数字,输出所有的排列组合 代码比较短,也比较简单,没有很刻意的去把代码的风格写的好一点,所以数字常量什么的表介意.... /**********

Java:用键盘输入个人信息并输出

package 课堂练习;// 包的申明import java.util.*; //导入Java.util的所有类/** Created by Administrator on 2018/4/17 0017.*/ /键盘输入个人简历并输出 2018.4.17 V.1*/public class ShowResume{public static void main(String[] args){int age=25; //年龄String name="陈佳凯"; //姓名int work

(c语法百题11)输入一个数 ,输出其绝对值

知识点: if语句 内容: 输入一个数 ,输出其绝对值. 输入说明: 一行一个整数 输出说明: 一行一个整数 输入样例: -3 输出样例 : 3 #include <stdio.h> int main() { int a; scanf("%d",&a); if (a<0) { a=-a; } printf("%d\n",a); return 0; } (c语法百题11)输入一个数 ,输出其绝对值,布布扣,bubuko.com

编程题:用一组数组做函数参数来实现,输入两个数,输出其中最大数

#include<stdio.h> float max(float x,float y) { float z; if(x>y)z=x; else z=y; return z; } void main() { float a[2],c; scanf("%f,%f",&a[0],&a[1]); c=max(a[0],a[1]); printf("%f,%f,the max is %f\n",a[0],a[1],c); } 编程题:用一组

输入一个数,输出该数从低位到高位的序列

★输入一个数,输出该数从低位到高位的序列 #include<stdio.h> int main(){     int m,n;     printf("请输入一个数:\n");     scanf("%d",&m);     printf("该数从低位到高位的输出序列为:\n");     printf("%d",m);     while(m>0)     {     n=m%10;        

10.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图.写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数. 看了下上机指导上的答案,感觉自己写的这段代码有点low. //一个数组一个指针 #include <stdio.h> #define N 10 #define M 3 int b[N]; int * p=b; int main(){ void change(int a[N],int m); int a[N]={1,2,3,4,5,6,7,8,9,0};

C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

//C语言:输入一个数,输出比这个数小的所有素数,并求出个数. 1 #include<conio.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define MAX 100 5 int fun(int lim, int aa[MAX]) 6 { 7 int i, j,k=0; 8 for (i = 2; i <= lim; i++)//罗列每个数 9 { 10 for (j = 2; j < i; j++)//