编程题
1.给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
package com.liuzhen.array_2;
public class OddEvenSort {
//解法1:一头一尾指针往中间扫描
public void getOddEvenSort1(int[] A){
if(A.length == 1)
return;
int begin = 0;
int end = A.length - 1;
while(begin < end){
if(A[begin] % 2 == 1) //当A[begin]为奇数时
begin++;
else if(A[end] % 2 == 0) //当A[end] 为偶数时
end--;
else //当A[begin]不是奇数且A[end]不是偶数时
swap(A,begin,end);
}
}
//交换数组A的m位置和n位置上的值
public void swap(int[] A,int m,int n){
int temp = A[m];
A[m] = A[n];
A[n] = temp;
}
public static void main(String[] args){
OddEvenSort test = new OddEvenSort();
int[] A = {2,1,4,7,1,4,7,1,2,8,4,3,6,7,2,14,3,7,4,3,2,4,3,2,7};
test.getOddEvenSort1(A);
System.out.println("使用方法1:一头一尾指针往中间扫描结果:");
for(int i = 0;i < A.length;i++)
System.out.print(A[i]+" ");
}
}
2.找出数组中最后一个负数,打印出这个数和它的索引:
public void mian(){
int[] a={1,-2,3,-2,1,4,5};
for(int i=a.length-1;i>a.length-6;i--){
if(a[i]<0){
System.out.println(a[i]);
System.out.println(i);
}
}
3.数组排序
public void sortIntegers(int[] A) {
// write your code here
int i,j;
int tamp;
for(i=0;i<A.length-1;i++){
for(j=0;j<A.length-i-1;j++){
if(A[j]>A[j+1]){
tamp=A[j+1];
A[j+1]=A[j];
A[j]=tamp;
}
}
}
for(i=0;i<A.length;i++){
System.out.print(A[i]);
}
}
public void main(){
int[] A={3,2,1,4,5};
sortIntegers(A);
}
4.在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数
def func(*argc):
lens = len(*argc)
count = 0
tup=argc[0] #取出参数元组
for i in range(0,lens-1):
for j in range(i+1,lens):
if(tup[i] > tup[j]):
count += 1
return count
list = [7,5,6,4]
print(func(list))
5.取两个数组的交集:
private static void getJ(Integer[] m, Integer[] n)
{
List<Integer> rs = new ArrayList<Integer>();
// 将较长的数组转换为set
Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
// 遍历较短的数组,实现最少循环
for (Integer i : m.length > n.length ? n : m)
{
if (set.contains(i))
{
rs.add(i);
}
}
for(Integer i:rs){
System.out.println(i);
}
}
取两个数组的并集
public void getB(Integer[] m, Integer[] n)
{
// 将数组转换为set集合
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n));
// 合并两个集合
set1.addAll(set2);
Integer[] arr = {};
// return set1.toArray(arr);
for(Integer i:set1.toArray(arr)){
System.out.println(i);
}
}
取两个数组的差集:
public void main(){
Integer[] a={1,2,2,3,4};
Integer[] b={1,2,2};
getJ(a,b);
}
6.利用if实现一个随机要骰子的小游戏,随机摇一个骰子点数,玩家输入大小,利用if比较,猜对啦 猜错啦
double value = Math.random();
int number = (int)(value*6+1);
//System.out.println(number);
System.out.println("请猜大小:");
Scanner input = new Scanner(System.in);
String choose = input.nextLine();
if((number<=3 && choose.equals("小"))||(number>3 && choose.equals("大"))){
System.out.println("猜对了,骰子数是:"+number);
}else{
System.out.println("猜错了,骰子数是:"+number);
}
7.利用switch语句实现一个 判断学生成绩对应的区间 不及格 60-70及格、70-80中、80-90良、90-100优秀、100满分
System.out.println("请输入分数");
Scanner input = new Scanner(System.in);
int score = input.nextInt();
switch(score/10){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
System.out.println("及格");
break;
case 7:
System.out.println("中等");
break;
case 8:
System.out.println("良好");
break;
case 9:
System.out.println("优秀");
break;
case 10:
if(score==100){
System.out.println("满分");
break;
}
default:
System.out.println("不存在的分数");
8.操场上有100多人,三个人一组多1人,四个人一组多2人,五个人一组多2人,求解操场上有多少人
for(int x=100;x<200;x++){
if(x%3==1 && x%4==2 && x%5==2){
System.out.println("这个人数是:"+x);
}
}
9.甲乙丙丁四个人加工零件,加工的总零件数是370,如果甲加工的零件数多10,乙加工的零件数少20,丙加工的零件数乘以2,丁加工的零件数除以2,则四人加工的零件数就相等了,求四人加工的零件数分别是多少
//解题思路:如果四人相等的加工零件数为x,则甲:x-10;乙:x+20;丙:x/2;丁:x*2
for(int x=1;x<370;x++){
if((x-10)+(x+20)+(x/2)+(x*2)==370){
System.out.println("甲加工零件数是:"+(x-10));
System.out.println("乙加工零件数是:"+(x+20));
System.out.println("丙加工零件数是:"+(x/2));
System.out.println("丁加工零件数是:"+(x*2));
}
}
10.鸡兔同笼问题:小鸡+小兔总数50只,脚的总数160,小鸡和小兔各多少只
for(int x=1;x<50;x++){
for(int y=1;y<50;y++){
if(x+y==50 && 2*x+4*y==160){
System.out.println("鸡有:"+x+"只");
System.out.println("兔有:"+y+"只");
}
}
}
11.通过循环找寻100-999之间三位数字的水仙花数(水仙花数:百位数字的三次方+十位数字的三次方+个位数字的三次方=这个数本身)
for(int i=100;i<999;i++){
//百位数:int i=i/100 十位数:i%100/10 个位数:i%10
if((i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10)==i){
System.out.println("这个数:"+i+"是水仙花数");
}
//可以通过Math.pow(a,b)方法来计算a的b次方
if(Math.pow((i/100),3)+Math.pow((i%100/10),3)+Math.pow((i%10),3)==i){
System.out.println("这个数:"+i+"是水仙花数");
}
}
12.画出如下图形:
*
**
***
//解题思路:
//$$$* $:3 *:1 i:1
//$$** $:2 *:2 i:2
//$*** $:1 *:3 i:3
//**** $:0 *:4 i:4
//画占位符 循环次数:4-i
//画* 循环次数:i
//换行
for(int i=1;i<=4;i++){
//先画空格
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
//画*
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
13.画出如下图形:
*******
***#***
**###**
*#####*
// 解题思路
// ******* 第一行不符合规律,单独打印
// ***#*** 第二行*:3 #:1 i:2
// **###** 第三行*:2 #:3 i:3
// *#####* 第四行*:1 #:5 i:4
for(int i=1;i<=4;i++){
if(i==1){
System.out.print("*******");
}else{
for(int j=1;j<=5-i;j++){
System.out.print("*");
}
for(int j=1;j<=2*i-3;j++){
System.out.print("#");
}
for(int j=1;j<=5-i;j++){
System.out.print("*");
}
}
System.out.println();
}
14.画出如下图形:
1
121
12321
1234321
for(int i=1;i<=4;i++){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print(j);
}
for(int j=i-1;j>=1;j--){
System.out.print(j);
}
System.out.println();
}
15.画出九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i);
System.out.print(" ");
}
System.out.println();
}
16.找出2-100之间的质数,只能被1和自己本身整除的数
//思路:首先要先判断一个数是不是质数,排除1和本身的数,在这个范围内被这个数整除就不是质数
/*
int num=9;
boolean x=true;
for(int i=2;i<num-1;i++){
if(num%i==0){
x=false;
System.out.println(num+"这个数不是质数");
break; //如果满足if条件就跳出for循环
}
}
//如果for循环执行完没被整除,说明是质数
if(x==true){
System.out.println(num+"这个数是质数");
}
*/
//判断完一个数是否为质数后,再来判断2-100范围内的质数
for(int num=2;num<=100;num++){
boolean x=true;
for(int i=2;i<num-1;i++){
if(num%i==0){
x=false;
System.out.println(num+"这个数不是质数");
break;
}
}
if(x==true){
System.out.println(num+"这个数是质数");
}
}
17.有一个水池,已经盛满120立方米的水,有一个水管,每小时进水18立方米,有一个排水管,每小时排水30立方米,两个水管一起开,经过几个小时,水池水排完
int sum =120;
int hour=1;
while(sum>0){
sum+=18;
sum-=30;
System.out.println(hour+"小时,水池剩余水量:"+sum+"立方米");
hour++;
}
18.小明同学以7km/h的速度从A走到B,哥哥以18km/h的速度从B走到A,A到B的距离是1000km,经过几个小时才能相遇
int hour=1;
int sum=0;
while(sum<1000){
sum+=7;
sum+=18;
System.out.println(hour+"小时,走了:"+sum+"米");
hour++;
}
19.创建一个数组,用来存储1-100的偶数
int[] array = new int[50];
//array[0]=2 array[1]=4 array[2]=6 array[3]=8 array索引和值的规律就是 array[i]=2*i+2
for(int i=0;i<array.length;i++){
array[i]=2*i+2;
}
for(int value:array){
System.out.println(value);
}
20.将数组a{1,2,3,4} b{5,6,7,8,9,10}内的元素对应位置互换
int[] a={1,2,3,4};
int[] b={5,6,7,8,9,10};
int[] c=a;
a=b;
b=c;
for(int value:a){
System.out.println("a数组的值:"+value);
}
for(int value:b){
System.out.println("b数组的值:"+value);
}
21.给定一个数组a{1,2,3,4,5,6}将元素头尾对应互换位置a{6,5,4,3,2,1}
int[] a={1,2,3,4,5,6,7};
//交换位置的次数就是数组长度/2
for(int i=0;i<a.length/2;i++){
int x=a[i];
a[i]=a[(a.length-1)-i];
a[(a.length-1)-i]=x;
}
for(int value:a){
System.out.println(value);
}
22.给定一个数组a{1,2,3,4,5,6}计算数组所有元素的平均值
int[] a={1,2,3,4,5,6};
int sum=0;
for(int value:a){
sum+=value;
}
System.out.println(sum);
System.out.println(a.length);
double avg=(double)sum/a.length;
System.out.print(avg);
23.给定数组a{1,3,5,7,9,0,2,4,6,8}找寻数组中最大值和最小值
int[] a={1,3,5,7,9,0,2,4,6,8};
int max=a[0];
int min=a[0];
for(int i=0;i<a.length;i++){
if(a[i]<min){
min=a[i];
}
if(max<a[i]){
max=a[i];
}
}
System.out.println(max);
System.out.println(min);
24.给定两个数组a{1,2,3} b{4,5}合并两个数组
int[] a={1,2,3};
int[] b={4,5};
int[] c=new int[a.length+b.length];
for(int i=0;i<a.length;i++){
c[i]=a[i];
}
for(int i=0;i<b.length;i++){
c[a.length+i]=b[i];
}
for(int value:c){
System.out.println(value);
}
25.给定一个数组a{1,2,3,9,4,5}按照数组中的最大值位置 将数组拆分成两个{1,2,3}{4,5}
//思路:1.找出最大的值对应的索引 2.创建两个新的数组 3.找到新数组的元素
int[] a={1,2,3,9,4,5};
int max = a[0];
int index=0;
for(int i=0;i<a.length;i++){
if(a[i]>max){
max=a[i];
index=i;
}
}
//创建两个新数组,新数组的长度可根据index来确定
int[] b=new int[index];
int[] c=new int[a.length-index-1];
for(int i=0;i<b.length;i++){
b[i]=a[i];
}
for(int i=0;i<c.length;i++){
c[i]=a[index+1+i];
}
for(int value:b){
System.out.println("b数组的值:"+value);
}
for(int value:c){
System.out.println("c数组的值:"+value);
}
26.给定一个数组a{1,2,3,0,0,4,5,0,6,0,7}去掉数组中的0元素
//思路:1.找出非0元素的个数 2.创建一个新的数组 3.把非0元素放到新数组中
int[] a={1,2,3,0,0,4,5,0,6,0,7};
int count=0;
for(int i=0;i<a.length;i++){
if(a[i]!=0){
count++;
}
}
//创建一个新的数组,数组长度就是非0元素的个数
int[] b=new int[count];
//把旧数组的非0元素放到新数组中
int index=0;//用来记录新数组的索引
for(int i=0;i<a.length;i++){
if(a[i]!=0){
b[index]=a[i];
//当有值放入新数组后,索引就加1
index++;
}
}
for(int value:b){
System.out.println(value);
}
27.创建一个数组,存储2-100的质数
//思路:1.找出2-100的质数个数,即新数组的长度 2.创建新数组 3.将质数放到新数组
int count=0;
for(int num=2;num<=100;num++){
boolean y=true;
for(int i=2;i<num-1;i++){
if(num%i==0){
y=false;
//System.out.println(num+"这个数不是质数");
break;
}
}
if(y==true){
//System.out.println(num+"这个数是质数");
count++;
}
}
int[] array=new int[count];
int index=0;
for(int num=2;num<=100;num++){
boolean y=true;
for(int i=2;i<num-1;i++){
if(num%i==0){
y=false;
break;
}
}
if(y==true){
array[index]=num;
index++;
}
}
for(int value:array){
System.out.println(value);
}
28.数组排序 将数组a{5,3,2,1,4}按照升序排序{1,2,3,4,5}
int[] a={5,3,2,1,4};
for(int i=0;i<a.length-1;i++){//比较的轮次
for(int j=0;j<a.length-1;j++){//循环比较当前元素和后一个元素的大小
if(a[j]<a[j+1]){
int k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
for(int value:a){
System.out.println(value);
}
29.用户的登录认证(用数组当作小数据库 存储 用户验证)
System.out.println("请输入账号:");
Scanner input = new Scanner(System.in);
String userName=input.nextLine();
System.out.println("请输入密码:");
Scanner input2 = new Scanner(System.in);
String password=input2.nextLine();
String[][] array={{"aaa","111"},{"bbb","222"},{"ccc","333"}};
boolean r=false;
for(int i=0;i<array.length;i++){
if(userName.equals(array[i][0])){
if(!password.equals(array[i][1])){
//System.out.println("密码错误");
}else{
r=true;
System.out.println("登录成功");
}
break;
}
}
if(r==false){
System.out.println("账号或密码错误");
}
30.模拟班级同学每周换座位
System.out.println("请输入交换周数:");
Scanner input=new Scanner(System.in);
int week=input.nextInt();
//班级学生ID号
int[][] array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
for(int i=1;i<=week;i++){
int[] x=array[0];
array[0]=array[1];
array[1]=array[2];
array[2]=array[3];
array[3]=x;
}
for(int[] arr:array){
for(int v:arr){
System.out.println(v);
}
System.out.println("=======");
}

浙公网安备 33010602011771号