java数组和算法的问题

问题描述在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家... 问题描述
  在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。
  第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。
  注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n-1,其他编号为i的商店有两个相邻的商店i-1和i+1。
  给定第一天各个商店的菜价,请计算第二天每个商店的菜价。
输入格式
  输入的第一行包含一个整数n,表示商店的数量。
  第二行包含n个整数,依次表示每个商店第一天的菜价。
输出格式
  输出一行,包含n个正整数,依次表示每个商店第二天的菜价。
样例输入
8
4 1 3 1 6 5 17 9
样例输出
2 2 1 3 4 9 10 13
数据规模和约定
  对于所有评测用例,2 ≤ n ≤ 1000,第一天每个商店的菜价为不超过10000的正整数。
展开
 我来答
安徽新华电脑专修学院
2018-11-20 · 百度知道合伙人官方认证企业
安徽新华电脑专修学院
安徽新华电脑专修学院始建于1988年,隶属于新华教育集团,是国家信息化教育示范基地、中国 IT 教育影响力品牌院校.
向TA提问
展开全部
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入商店数量:");
int n = 0;
boolean pass = false;
while (!pass) {
n = Integer.parseInt(sc.nextLine());
if (n < 2 || n > 1000) {
System.out.println("超出范围:2 ≤ n ≤ 1000,请重新输入");
} else {
pass = true;
}
}

System.out.println("请输入各个店铺价格:");
int[] price = new int[n]; // 第一天价格
pass = false;
while (!pass) {
String str = sc.nextLine();
String[] arr = str.split(" ");
if (arr.length != n) {
System.out.println("输入价格数量与店铺数量不一致,请重新输入价格:");
} else {
for (int i = 0; i < n; i++) {
try {
price[i] = Integer.parseInt(arr[i]);
pass = true;
} catch (Exception e) {
System.out.println("输入格式错误,请重新输入价格");
}
}
}
}

int[] newPrice = new int[n]; // 第二天价格
for (int i = 0; i < n; i++) {
int avg;
if (i == 0) {
avg = (price[i] + price[i + 1]) / 2;
} else if (i == n - 1) {
avg = (price[i - 1] + price[i]) / 2;
} else {
avg = (price[i - 1] + price[i] + price[i + 1]) / 3;
}
newPrice[i] = avg;
}

// 输出
System.out.println(n);
for (int i = 0; i < n; i++) {
System.out.print(newPrice[i] + "\t");
}
}
}
巨蟹神算子
2018-09-16 · TA获得超过437个赞
知道小有建树答主
回答量:292
采纳率:90%
帮助的人:116万
展开全部

实现代码如下:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入商店数量:");
        int n = 0;
        boolean pass = false;
        while (!pass) {
            n = Integer.parseInt(sc.nextLine());
            if (n < 2 || n > 1000) {
                System.out.println("超出范围:2 ≤ n ≤ 1000,请重新输入");
            } else {
                pass = true;
            }
        }

        System.out.println("请输入各个店铺价格:");
        int[] price = new int[n]; // 第一天价格
        pass = false;
        while (!pass) {
            String str = sc.nextLine();
            String[] arr = str.split(" ");
            if (arr.length != n) {
                System.out.println("输入价格数量与店铺数量不一致,请重新输入价格:");
            } else {
                for (int i = 0; i < n; i++) {
                    try {
                        price[i] = Integer.parseInt(arr[i]);
                        pass = true;
                    } catch (Exception e) {
                        System.out.println("输入格式错误,请重新输入价格");
                    }
                }
            }
        }

        int[] newPrice = new int[n]; // 第二天价格
        for (int i = 0; i < n; i++) {
            int avg;
            if (i == 0) {
                avg = (price[i] + price[i + 1]) / 2;
            } else if (i == n - 1) {
                avg = (price[i - 1] + price[i]) / 2;
            } else {
                avg = (price[i - 1] + price[i] + price[i + 1]) / 3;
            }
            newPrice[i] = avg;
        }

        // 输出
        System.out.println(n);
        for (int i = 0; i < n; i++) {
            System.out.print(newPrice[i] + "\t");
        }
    }
}
更多追问追答
追问
运行后一直显示数量不一致怎么办,大佬求助
追答
不应该呀,我运行是正常的,看你输入的是不是有问题,价格之间是空格
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
林大仙啦啦啦
2018-09-17
知道答主
回答量:7
采纳率:0%
帮助的人:5573
展开全部
运行过了,是正确的,就是浮点型转整型的时候会把小数部分省掉。-----善知教育
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式