is_thinking 2015-05-01 13:22 采纳率: 66.7%
浏览 1631
已采纳

喷水装置问题,执行了一组内循环为什么n的值变成了1074370969,但是代码中没有修改过n的值。

现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
输入
第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。

 #include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int sort(double arr[],int x)//定义一个插入排序,由大到小排。经测试该方法正确
{
    double tem;
    for(int i=1;i<x;i++)
    {
        for(int j=i;j>0;j--)
        {
            if(arr[j]>arr[j-1])
            {
                tem = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tem;
            }
            else
            {
                break;
            }
        }
    }
    return 0;
}
int main(void)
{
   int m=0;

   scanf("%d",&m);
   int result[] = {0};//记录每组所需要的装置个数
   double pour[] = {0};//记录初始输入的装置能覆盖的半径
   int n;//表示最初由n个喷水装置
   int num = 0;//最终需要的装置个数
   double len = 20;//草坪长度

   for(int i=0;i<m;i++)
   {

       scanf("%d",&n);
       len = 20;//重新判断下一组所以要重新赋值
       num = 0;//重新赋值
       for(int h=0;h<n;h++)//依次输入各个值,空格间隔开
       {
            scanf("%lf",&pour[h]);
       }

       sort(pour,n);//将输入的半径由大到小排序

       for(int j=0;j<n;j++)
       {
           len = len - 2*sqrt(pour[j]*pour[j]-1);
           num++;//需求的装置曾一
           if(len<0)
           {
             result[i] = num;
               break;
           }
       }
   }
   for(int k=0;k<m;k++)
   {
       printf("%d\n",result[k]);
   }

}

为什么n的值经历了一次内循环后会变大呢?请各位老师指点,谢谢

  • 写回答

1条回答 默认 最新

  • Tiger_Zhao 2015-05-01 14:17
    关注

    你的pour[]数组**长度只有1**啊,除了pour[0]是合法的,用其他下标访问的pour[h]都**越界**了。
    所以只要初始的n不是1,scanf("%lf",&pour[h])会把后面的n、num、len逐个覆盖掉。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器