咕噜小盒 2023-04-07 19:45 采纳率: 25%
浏览 15

蓝桥杯付账问题答案通不过测试点

题目:

img

为什么我的代码和题解的代码,没有什么不同的地方,但是我的代码一个测试点都通不过?
题解代码:


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int pp(long long int a[],int low,int high)
{
    int n = high;long long int m;
    m=a[low];//用第一个记录做中间
    while(low<high)
    {
        while(low<high && a[high]>=m) --high;//如果high指针位置>=中间数,直到high位置<中间
        a[low]=a[high];//因为上面循环high指针位置<中间,所以把high位置放到low位置 
        while (low<high && a[low]<=m) ++low;//如果low指针位置<=中间数,直到high位置>中间
        a[high]=a[low];
    }
    a[low]=m;
    return low;
}
int p;
void Qsort(long long int a[],int low,int high)
{
    if(low<high)
    {
        p=pp(a,low,high);
        Qsort(a,low,p-1);
        Qsort(a,p+1,high);
    }
}
int main(int argc, char *argv[])
{
  // 请在此输入您的代码 
  int n,i;double k,avg1,avg,sum=0.0;
  long long a[500010];
  scanf("%d %lf",&n,&k);
  for(i=0;i<n;i++)
  {
      scanf("%lld",a+i);
  }
  avg1=avg=1.0*k/n;
  Qsort(a,0,n-1);
  for(i = 0 ; i < n ; i++)
  if( a[i] * (n-i) < k )
  {
      sum+=(a[i]-avg1)*(a[i]-avg1);
      k-=a[i];
  }
  else
  {
      avg=k/(n-i);
      sum+=(avg-avg1)*(avg-avg1)*(n-i);
      break;
  }
  sum=sqrt(sum/n);
  printf("%.4lf",sum);
  return 0;
}

我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h> 
long long a[500010]; 
int compare(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}
int main()
{
    int n,i;
    double s;
    double sum=0.0;//这个sum求的是方差 
    scanf("%d%lf",&n,&s);

    for(i=0;i<n;i++)
       {
           scanf("%d",&a[i]);
       }
    int size=sizeof(a)/sizeof(a[0]);
    qsort(a,size,sizeof(a[0]),compare);

    double ave=1.0*s/n;
    for(i=0;i<n;i++)
       {                                 //if和else同时也划分了前半段和后半段 
           if(a[i]*(n-i)<s)
             {
                 sum=sum+(a[i]-ave)*(a[i]-ave);
                 s=s-a[i];
           }
        else
          {
              double nave=s*1.0/(n-i);                  //注意:这里的i是新加过的,这个是新的平均数,用小数保证精度不会丢失,而且个数要改变,前面的人全出,后面的人肯定都是出得起的 
              sum+=(nave-ave)*(nave-ave)*(n-i); 
              break;       //记得要break;出来,现在的结果是对的
               
          }
       }
     
    printf("%.4f",sqrt(sum/4));
    
}


为什么我的代码和题解的代码,没有什么不同的地方,但是我的代码一个测试点都通不过?寻求帮助,谢谢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-07 22:04
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7499298
    • 你也可以参考下这篇文章:牛客 华为机试(我的代码记录)
    • 除此之外, 这篇博客: 计算一个行,列都不相等的对称矩阵中的 代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • public class TestMatrix {
         // 深度优先搜索 返回对称矩阵
         private static boolean dcMatrix(int rank,int[][] arr,int i,int j){
             if (j < rank - 1) {
                 j++;
             } else if (i < rank - 1) {
                 i++;
                 j=0;
             } else {
                 return true;
             }
             for(int k=0;k<rank;k++){
                 arr[i][j] = k;
                 if(check(i,j,arr)){
                     if(dcMatrix(rank,arr,i,j)){
                         return true;
                     }
                 }
             }
             return false;
         }
         private static boolean check(int i,int j,int[][] arr){
             for(int k=0;k<i;k++){
                 if(arr[k][j] == arr[i][j]){
                     return false;
                 }
             }
             for(int k=0;k<j;k++){
                 if(arr[i][k] == arr[i][j]){
                     return false;
                 }
             }
             return true;
         }
      
         public static void main(String[] args) {
             int[][] arr = new int[5][5];
             dcMatrix(5,arr,0,-1);
             for(int i=0;i<arr.length;i++){
                 for(int j=0;j<arr.length;j++){
                     System.out.print(arr[i][j]);
                 }
                 System.out.println();
             }
         }
      }
      
    • 您还可以看一下 李月喜老师的企业微信自建代开发应用开发篇课程中的 创建代开发模板处理回调并提交审核上线小节, 巩固相关知识点
    评论

报告相同问题?

问题事件

  • 创建了问题 4月7日

悬赏问题

  • ¥20 dify工作流分析sql查询结果
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法