每日一练
如果苹果1元一个,桔子2元一个,芒果4元一个,若是用10元去买,有几种组合?
public class Demo8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义苹果价钱为a,桔子价钱为b,芒果价钱为c d为一共有多少钱
int a,b,c,d;
a = 1;
b = 2;
c = 4;
d = 10;
//定义n为一共有n种方法实现
int n = 0;
//只买苹果一共有多少种方法
for(int i = 0;i <= 10/a;i++) {
//只买桔子一共有多少种方法
for(int j = 0;j <= 10/b;j++) {
//只买芒果一共有多少种方法
for(int z = 0;z <= 10/c;z++) {
if(a*i+b*j+c*z == d) {
n += 1;
System.out.println("苹果"+i+"\t桔子"+j+"\t芒果"+z);
}
}
}
}
System.out.println("一共有"+n+"方法实现");
}
}
DAY-THREE
数组:
格式:常用格式1:数据类型【 】 数组名称={数据1,数据2,。。。。。数组n};
常用格式2:数据类型【 】数组名称 = new 数据类型 【数组长度】;
赋值:数组名称【下标】 = 值
如何获取数组的长度:数组名称.length;用FOR循环取出数组数据叫遍历。
寻找数组中的最大值:1.先遍历数组 三元式 n = n>num[i]?n:num【i】;
寻找数组中的最小值:1.先遍历数组 三元式 n = n<num[i]?n:num [i];
冒泡排序:比较轮数= 数组长度-1
外层循环控制的是比较的轮数: 数组长度-1
内层循环控制的是每轮比较的次数:数组长度-i-1
二分查找法:思路:1.确定查找的范围:最大 最小
2.计算中间的下标(最小+最大)/2
3.比较中间下标数据,中间下标较大,则最大下标等于中间下标-1
比较中间下标数据,中间下标较小,则最小下标等于中间下标
作业:
选队长游戏训练任务:
今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长
package lok1;
import java.util.Arrays;
import java.util.Scanner;
public class Demo9 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("输入人数为:");
int a = input.nextInt();
int num = 0;//计数
int people = 0;//总人数
boolean[] b= new boolean[a];
for(int i=0;i < b.length;i++ ) {
b[i] = true;
people = i+1;
}
while(people >1) {
for(int j = 0; j < b.length; j++) {
if(b[j] == true) {
num += 1;
if(num == 3) {
b[j] = false;
people -= 1;
num = 0;
}
}
}
}
for(int i = 0;i<b.length;i++) {
if(b[i]==true) {
i += 1;
System.out.println("第"+i+"个同学为队长");
}
}
System.out.println(Arrays.toString(b));
}
}
查找某个整数
import java.util.Arrays;
import java.util.Scanner;
public class Demo11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = new int[10];
System.out.println("输入10个整数");
Scanner input = new Scanner(System.in);
for(int i = 0;i<nums.length;i++) {
nums[i] = input.nextInt();
}
//冒泡排序确定最大值
System.out.println("对数组进行排序");
for(int i = 0;i<nums.length-1;i++) {
for(int j = 0;j<nums.length-i-1;j++) {
int a = 0;
if(nums[j]>nums[j+1]) {
a = nums[j+1];
nums[j+1] = nums[j];
nums[j] = a;
}
}
}
//二分查找
System.out.println("输入要查找的数:");
int a = input.nextInt();//要查找的数
int max = nums.length-1;
int min = 0;
int mid =(max+min)/2;
while(true) {
if(nums[mid]>a) {
max = mid-1;
}else if(nums[mid]<a){
min = mid+1;
}else {
break;
}
if(min>max) {
mid = -1;
System.out.println("没有这个数");
break;
}
mid = (max+mid)/2;
}
System.out.println("位置"+mid);
System.out.println("下标位置值"+nums[mid]);
System.out.println(Arrays.toString(nums));
}
}
找出数组的最值
import java.util.Scanner;
//找出数组的最值
public class Demo12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] nums = new int[10];
System.out.println("输入10个整数:");
for(int i= 0;i<nums.length;i++) {
nums[i] = input.nextInt();
}
int max = nums[0];
System.out.println("输入10个整数:");
for(int i= 1;i<nums.length;i++) {
max = max>nums[i] ? max : nums[i];
}
int min = nums[0];
for(int i= 1;i<nums.length;i++) {
min = min<nums[i] ? min : nums[i];
}
System.out.println("数组最大值为:"+max);
System.out.println("数组最小值为:"+min);
}
}
两数之和
public class Demo13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] num = {2, 7, 11, 15};
int target = 13;
System.out.println("对数组进行排序");
for(int i = 0;i<num.length-1;i++) {
for(int j = 0;j<num.length-i-1;j++) {
if(num[j]>num[j+1]) {
int a = 0;
a = num[j];
num[j] = num[j+1];
num[j+1] = a;
}
}
}
int c = 0 ;
int b = 0 ;
for(int i = 0;i<num.length;i++) {
for(int j = i+1;j<num.length;j++) {
if(num[i]+num[j] == target) {
c = i;
b = j;
}
}
}
System.out.println("下标"+c+"和"+b+"的和为目标值");
}
}
*排序并查找
对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找 6 并
输出排序后的下标。*/
public class Demo14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {1,3,9,5,6,8,15,4,8};
for(int i = 0;i<nums.length-1;i++){
for(int j = 0;j<nums.length-i-1;j++) {
int a = 0;
if(nums[j]>nums[j+1]) {
a = nums[j];
nums[j] = nums[j+1];
nums[j+1] = a;
}
}
}
int target = 6;
int max = nums.length-1;
int min = 0;
int mid =(max+min)/2;
while(true) {
if(nums[mid]>target) {
max = mid-1;
}else if(nums[mid]<target){
min = mid+1;
}else {
break;
}
if(min>max) {
mid = -1;
}
mid = (max+min)/2;
}
System.out.println("目标的下标在"+mid);
System.out.println(Arrays.toString(nums));
}
}
移动零
import java.util.Arrays;
public class Demo15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {0,1,0,3,12};
int num = 0;
for(int i = 0;i<nums.length;i++) {
if(nums[i]==0) {
num += 1;
}else if(nums[i] != 0) {
nums[i-num] = nums[i];
nums[i]=0;
}
}
System.out.println(Arrays.toString(nums));
}
}