例题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);
	}
}