例题1:
给定一个整数 N (1 ≤ N ≤ 1000),请在控制台打印出[1 , N],并输出[1 , N]的和。
思路:
1、题目要求中存在自增与变量,因此使用for循环;
2、考虑到[1 , N]是等差数列,因此可以直接使用等差数列求和公式;
代码:
//解法1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int sum=0;
for(int i=1;i<=n;i++) {
System.out.println(i);
sum=sum+i;
}
System.out.println(sum);
}
}
//解法2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++) {
System.out.println(i);
}
System.out.println(n*(n+1)/2);
}
}
例题2:
给定一个整数 N(1 ≤ N ≤ 1000),请在控制台打印出[1 , N]中所有的奇数。
思路:
1、判断奇偶数并输出;
2、考虑奇数之间的差值均为2,且循环从i = 1开始,1位奇数,因此每次循环让i += 2,保证每次的i值都为奇数,并直接打印。
代码:
//解法1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++) {
if(i/2==0) continue;
System.out.println(i);
}
}
}
//解法2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i+=2) {
System.out.println(i);
}
}
}
例题3:
给定一个整数N(1 ≤ N ≤ 1000),接下来给定N个整数,请输出第1个既是2的倍数又是7的倍数的数,如果不存在则输出-1。
思路:
1、需要接收N个数,因此需要定义一个N维的数组(下标从0开始)接收所有的数;
2、通过for循环遍历数组,由于只需要找到第一个满足要求的数,因此可以直接break跳出循环;
3、可以定义一个int类型的变量flag,令其值为-1,若是未找到符合的数字,最后的输出值也是-1,若是找到了符合要求的值,则更改flag的值即可。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int flag=-1;
for(int i=0;i<n;i++) {
if(a[i]%2==0&&a[i]%7==0) {
flag=a[i];
break;
}
}
System.out.println(flag);
}
}
Leetcode 1题 两数之和:
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
可以按任意顺序返回答案。
思路:
1、方法一:枚举法(暴力搜索),利用两个for循环遍历整个数组;
2、由于函数中已定义数组以及target,因此无需重复定义;
3、由于需要输出的是两个元素,无法直接返回,因此定义一个返回值数组存储两个下标;
4、方法二:哈希表,时间复杂度更低;
5、哈希表定义:Map<Key,Value>Name=new HashMap<String,Integer>();
代码:
//方法1:枚举法,两个for循环
sclass Solution {
public int[] twoSum(int[] nums, int target) {
int n=nums.length;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(nums[i]+nums[j]==target) {
return new int[]{i,j};
}
}
}
return new int[0];
}
}
//方法2
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>hashtable=new HashMap<Integer,Integer>();
//key记录数值,value记录下标
for(int i=0;i<nums.length;i++){
if(hashtable.containsKey(target-nums[i])){
//containsKey用来判断该哈希表中是否存在这个key
return new int[]{hashtable.get(target-nums[i]),i};
//map.get用来获取对应的value下标
}
hashtable.put(nums[i],i);//若没找到则将nums[i]存入map中
}
return new int[0];
}
}
洛谷 P5718 找最小值:
给出n和n个整数 ,求这n个整数中最小值是什么。
代码:
import java.util.Scanner;
public class Min {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []a=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int min=a[0];
for(int i=1;i<n;i++) {
if(a[i]<min) min=a[i];
}
System.out.println(min);
}
}
洛谷 P5720 一尺之锤:
《庄子》中说到:“一尺之锤,日取其半,万世不竭”。第一天有一根长度为a的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除2,向下取整)。第几天的时候木棍的长度会变为1。
注意:
由于第一天是长度为a,第二天开始锯掉一半,因此累计的初始值应为1。
代码:
import java.util.Scanner;
public class half {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int i=1;
while(a>1) {
a=a/2;
i++;
}
System.out.println(i);
}
}