为啥结果不是-2 而是0?


 Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int odd=0;
        int even=0;
        int sum=0;
        for (int i=1; i <= n; i++) {
            if (i % 2 != 0) {
                odd = i;
            } else {
                even = i;
            }
            sum += odd - even;
        }
        System.out.println(sum);

结果不会有-2,只会有0和1。
如果进入循环,至少执行1次,odd=1,even=0,sum=1;如果再次执行,odd不变,even比odd大1,sum清0。如果循环继续,odd比even大1,sum又变1;再继续,even比odd大1,sum清0。结果只会在0和1两者之间变化。即输入奇数,结果为1,输入偶数,结果为0。输入<=1不会进入循环。

所以n是多少?你这都不说能知道就是神了

你输入的是多少

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7557361
  • 这篇博客你也可以参考下:为什么数组下标是从0开始的,而不是1?
  • 除此之外, 这篇博客: 动态规划零钱兑换中的 2.零钱兑换Ⅱ 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Leetcode 518;medium;
    给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
    输入: amount = 5, coins = [1, 2, 5]
    输出: 4
    解释: 有四种方式可以凑成总金额:
    5=5
    5=2+2+1
    5=2+1+1+1
    5=1+1+1+1+1

    package dynamicprogram;
    
    import java.util.Arrays;
    
    public class Main0518零钱兑换的方法数Ⅱ {
    	public static void main(String[] args) {
    		System.out.println(new Solution518().change(11, new int[]{1,2,5}));
    	}
    }
    
    class Solution518 {
    	public int change(int amount, int[] coins) {
    		int[] dp = new int[amount + 1];
    		dp[0] = 1;
    		for (int i = 0; i < coins.length; i++) {
    			for (int j = 0; j < dp.length; j++) {
    				if (j - coins[i] >= 0) {
    					dp[j] += dp[j - coins[i]];
    				}
    			}
    //			System.out.println("当有前" + (i + 1) + "张RMB:" + Arrays.toString(dp));
    		}
    		return dp[amount];
    	}
    }
    
  • 您还可以看一下 CSDN就业班老师的数据分析实战班:基础课课程中的 2.自定义函数的介绍与使用小节, 巩固相关知识点

额。。忘说了输入4