[南阳OJ-No.11]奇偶数分离|有一个整型偶数n(2<= n <=10000),:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出

南阳OJ-No.11

时间限制:3000 ms | 内存限制:65535 KB

描述

 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。

输入

第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。

输出

第一行输出所有的奇数
第二行输出所有的偶数

样例输入

2
10
14

样例输出

1 3 5 7 9
2 4 6 8 10

1 3 5 7 9 11
2 4 6 8 10 12


java

时间124,内存1849

/*2017.2.1
 * JDK1.7
 * 奇偶数分离
 * */
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws Exception{
        Scanner cin = new Scanner(System.in);
        int a = cin.nextInt();  //a组数据

        while (a>=1) {  //a组测试,则为a组循环
            int x = cin.nextInt();

            for (int n=1; n<=x; n++) {  //遍历输出奇数
                if (n%2 !=0) {
                    System.out.print(n + " ");
                }
            }

            System.out.println();

            for (int n=1; n<=x; n++) {  //遍历输出偶数
                if (n%2 == 0) {
                    System.out.print(n + " ");
                }
            }

            a--;
        }
    }
}

时间114,内存1849

/*2017.2.1
 * JDK1.7
 * 奇偶数分离
 * */
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws Exception{
        Scanner cin = new Scanner(System.in);
        int a = cin.nextInt();  //a组数据

        while (a>=1) {  //a组测试,则为a组循环
            int x = cin.nextInt();
            int n = 1;
            while (n<=x)
            {
                if (n%2 !=0) {
                    System.out.print(n + " ");
                }
                n++;
            }

            System.out.println();

            n = 1;
            while (n<=x) {
                if (n%2 == 0) {
                    System.out.print(n + " ");
                }
                n++;
            }

            a--;
        }
    }
}

while效率要比for循环高!!!!!

时间58,内存1788

该解法来自网络,原文请参照
来自安德里亚的成长:奇偶数分离

import java.util.Scanner;  

public class Main {  
    public static void main(String[] args) {  
        int [] src = getInt();      //读取输入
        StringBuffer odds, evens;   //odds用于存储奇数,evens用于存储偶数

        for(int j = 0; j < src.length; j++) {  
            odds = new StringBuffer();
            evens = new StringBuffer(); 

            for(int i = 1; i <= src[j]; i++) {  //一次遍历即可获得奇偶数分离  
                if(isOdd(i)) {  
                    odds.append(i+" ");  
                } else {  
                    evens.append(i+" ");  
                }  
            }
            //输出结果
            System.out.println(odds.toString());  
            System.out.println(evens.toString());  
            System.out.println();  
        }  
    }
    public static  int[] getInt() {  
        Scanner sc=new Scanner(System.in);  
        int x=sc.nextInt();  
        int[] s=new int[x];  
        for(int i=0;i<s.length;i++){  
            s[i]=sc.nextInt();  
        }  

        return s;  
    }
    //判断是奇数  
    public static  boolean isOdd(int i) {  
        if(i % 2 != 0) return true;  
        return false;  
    }  
}  

时间34,内存436
这个是在南阳OJ上通过结果里找的算是最优的算法了,投了一个币偷瞄了下源码,用户名Bryan,一个字,美!

import java.util.Scanner;

public class Main {
    public static Scanner cin = new Scanner(System.in);
    public static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) {
        int line = 0;
        int number = cin.nextInt();

        for(int i=0; i<number; i++){    
            line = cin.nextInt();

            for(int j=1; j<=line; j+=2){
                sb.append(j).append(' ');
            }
            sb.append('\n');

            for(int j = 2; j<=line; j+=2){
                sb.append(j).append(' ');
            }

            System.out.println(sb);
            sb.delete(0, sb.length());
        }   
    }
}

c++

时间4,内存240

#include <iostream> 
using namespace std;

int main()
{
  int a;  //记录循环次数
  cin >> a;

  while(a>=1)
  {
    int x;
    cin >> x;

    for (int n=1; n<=x; n++) {  //遍历输出奇数
      if (n%2 !=0) {
          cout << n << " ";
      }
    }

    cout << endl; 

    for (int n=1; n<=x; n++) {  //遍历输出偶数
        if (n%2 == 0) {
            cout << n << " ";
        }
    }

    a--;
  } 

  return 0; 
} 

时间0,内存240
最优解法

#include<stdio.h>
int main()
{
 int n;
 scanf("%d",&n);
 int a;
 while(n--)
 {
  scanf("%d",&a);
  for(int i=1;i<=a;i+=2)
   printf("%d ",i);
  puts("");
  for(int i=2;i<=a;i+=2)
   printf("%d ",i);
  puts("");
 }
}        
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值