吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 676|回复: 9
收起左侧

[求助] 问题在哪呢??

[复制链接]
18131431963 发表于 2022-5-14 13:37
某珠宝鉴定大赛,由主持人输入珠宝的真实价格,再由8位参赛选手输入各自估计的价格,估价与真实价格最接近的选手获胜。

#include <stdio.h>#include <math.h>
int main()
{
  int i,n=0;
  float x,t,y;
  scanf("%f\n",&t);
  scanf("%f",&x);
  for(i=1;i<=8;i++)
    {
    scanf("%d",&y);
    if(fabs(x-t)>fabs(y-t))   
    {x=y;
     n=i;
     }
    else
    {x=x;
    n=i;
    }
    }
   printf("%d\n%.1f",n,x);
     return 0;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaoyu2032 发表于 2022-5-14 14:33
求助的时候为什么不把问题描述的清楚一些呢?
你到底要问什么问题,不能说一下吗?要大家来猜吗?
 楼主| 18131431963 发表于 2022-5-14 14:44
某珠宝鉴定大赛,由主持人输入珠宝的真实价格,再由8位参赛选手输入各自估计的价格,估价与真实价格最接近的选手获胜。

(注:程序不考虑估价相同的情况,只需输出一位估价最接近的选手。)

提示:

1、价格是浮点数,求绝对值函数应使用fabs(x)
2、该题是求最小值的题目,求 fabs(估价-真实价格) 的最小值
可参考MOOC本周视频“求最值及其位置”

输入格式:
第一行输入 :珠宝的真实价格

第二行输入 :选手估计的价格(单位:万)

输出格式:
获胜选手的序号

最接近的估价(保留1位小数,使用%.1f)

输入样例:
6.5
0.8    12    3    6.4    9.5    0.75    5.4    71
输出样例:
4
6.4
 楼主| 18131431963 发表于 2022-5-14 14:45
xiaoyu2032 发表于 2022-5-14 14:33
求助的时候为什么不把问题描述的清楚一些呢?
你到底要问什么问题,不能说一下吗?要大家来猜吗?

明白了!!
jieleime 发表于 2022-5-14 15:14
大概看了下,是不是你这个代码会出现9个选手,而且获胜选手的序号也不太准?
ciker_li 发表于 2022-5-14 16:03
#include <stdio.h>#include <math.h>
int main()
{
  int i,n=0;
  float x,t,y;
  scanf("%f\n",&t);
  scanf("%f",&x);
  for(i=1;i<=8;i++)          //应该是i<8
    {
    scanf("%d",&y);
    if(fabs(x-t)>fabs(y-t))   
    {x=y;
     n=i;
     }
    else       //这个else多余
    {x=x;      
    n=i;
    }
    }
   printf("%d\n%.1f",n,x);
     return 0;
}

#include <stdio.h>#include <math.h>
int main()
{
  int i,n=0;
  float x,t,y;
  scanf("%f\n",&t);
  scanf("%f",&x);
  for(i=1;i<8;i++)
    {
    scanf("%d",&y);
    if(fabs(x-t)>fabs(y-t))   
        {x=y;
         n=i;
        }
   
    }
   printf("%d\n%.1f",n,x);
     return 0;
}

免费评分

参与人数 1吾爱币 +1 收起 理由
18131431963 + 1 谢谢@Thanks!

查看全部评分

Goldrepo 发表于 2022-5-14 16:47

依次比较每个竞拍者与真实价格的差距,将差距存放到一个数组或列表里面,然后再从这个数组或列表里面求出最小值(最接近),再依次求出哪个竞价者减去真实价格的差距=最小值,并打印出来
C++不熟,这是我用java实现的效果,可以看下

[Java] 纯文本查看 复制代码
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * <p>Description: Demo</p>
 *
 * [url=home.php?mod=space&uid=686208]@AuThor[/url] Goldrepo
 * [url=home.php?mod=space&uid=686237]@date[/url] 2022-05-14 16:18
 **/
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入珠宝的真实价格:");
        String realPrice = input.nextLine();
        // 为了简便,这里就不判断输入的内容是否合法了
        BigDecimal price = new BigDecimal(realPrice);
        System.out.print("请依次输入每位竞拍者的竞拍价格(enter表示结束, 每个价格用空格隔开):");
        String line = input.nextLine();
        String[] guess = line.split(" ");
        // 将输入的字符串转成数字
        List<BigDecimal> prices = Arrays.stream(guess).map(e -> new BigDecimal(e)).collect(Collectors.toList());
        // 依次比较得出与实际价格的差距
        List<Double> diffs = prices.stream().map(e -> Math.abs(e.subtract(price).doubleValue())).collect(Collectors.toList());
        // 求出最小差距的值
        double min = diffs.stream().reduce(diffs.get(0), Double::min);
        System.out.println("差距最小的分别是:");
        for(int i = 0; i<prices.size(); i++){
            BigDecimal p = prices.get(i);
            double tmp = Math.abs(p.subtract(price).doubleValue());
            if(tmp == min){
                System.out.println("第"+(i+1)+"位, 出的价格: " + p.doubleValue());
            }
        }
        System.out.println("");
    }
}


图片.png

免费评分

参与人数 1热心值 +1 收起 理由
18131431963 + 1 谢谢@Thanks!

查看全部评分

 楼主| 18131431963 发表于 2022-5-14 17:24
Goldrepo 发表于 2022-5-14 16:47
依次比较每个竞拍者与真实价格的差距,将差距存放到一个数组或列表里面,然后再从这个数组或列表里面求出 ...

还没有学这个,谢谢!
 楼主| 18131431963 发表于 2022-5-14 17:25
ciker_li 发表于 2022-5-14 16:03
#include #include
int main()
{

感谢,终于知道问题在哪里了!
xiaoyu2032 发表于 2022-5-14 18:01
18131431963 发表于 2022-5-14 17:25
感谢,终于知道问题在哪里了!

scanf("%d",&y);
这一行应该%f,编译的时候应该会提示数据类型不匹配吧

另外输入的格式其实是不符合的,要求应该是一行把8个竞价一次输入吧。

#include "stdafx.h"
#include<windows.h>
#include <stdio.h>
#include <math.h>
int main()
{
    int i, n = 0;
    float price_true,temp=0;
    float price[8] = {};
    printf("请输入珠宝实际价格:");
    scanf_s("%f", &price_true);
    printf("请输入8个竞猜价格(空格隔开):");
    scanf_s("%f%f%f%f%f%f%f%f", &price[0], &price[1], &price[2], &price[3], &price[4], &price[5], &price[6], &price[7]);
    for (i = 0; i<8; i++)
    {
        if (fabs(temp - price_true)>fabs(price[i] - price_true))
        {
            temp = price[i];
            n = i;
        }
    }
    printf("%d\n%.1f", n+1, temp);
    system("pause");
    return 0;
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
18131431963 + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表