问题标题: 酷町堂:酷町堂:1059 邻居的神奇差值

0
0
已解决
王浩然
王浩然
新手光能
新手光能

55分,哪错了,求大神解答! 

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    long long int n,a[200],b[200],sum=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        if(a[i]>=a[i+1])
            b[i]=abs(a[i]-a[i+1]);
        else
            b[i]=abs(a[i+1]-a[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            int t=b[i];
            b[i]=b[j];
            b[j]=t; 
        } 
    }
    for(int i=b[0];i<n-1;i++)
    {
        int j=0;
        if(b[j]==i)
            sum++;
        j++;
    }
    if(sum==n-1)
    {
        cout<<"Amazing";
    }
    else
    {
         cout<<"Normal";
    }
}


0
已采纳
方亦欧
方亦欧
新手光能
新手光能

不知你现在对了没有,如果仍然没对,就给你点建议吧。

这题不难,你的程序第一个问题出在对循环范围的掌控上。b数组存储的范围是从0-n-2,而你的循环却是从0循环到了n-1,这是a数组

的范围,b数组应该比它短一位。

第二个问题就有些低级了。看看你的排序,你没有比较b[i]和b[j]的大小就直接交换了,结果自然不对。

(给你补充一个交换函数swap,交换时直接写swap(b[i],b[j])就可以了,头文件为iostream)

选排给你发一下:

for(int i=0;i<n-2;i++)
{
   for(int j=i+1;j<n-1;j++)
   {
       if(b[i]>b[j])
          swap(b[i],b[j]);
   } 
}

(注意循环变量的范围,i是从0到n-2,j是从i+1到n-1,和模板是不一样的,不要死板的搬套路哦)

第三个错误是在判断差值序列时,你的本意是想比较b[j]和i是否相等,相等则自增sum,最后判断sum是否等于n-1。然而,你在循环开

头定义了int j=0,这样在每次循环时你的j都会重新赋值为0,导致你的程序其实一直在判断b[0],结果难免出错;此外,i的初值你赋

为了b[0],应该是0才对。

另外,你的这种方法不够简便,最好的方法是这样的:

for(int i=0;i<n-1;i++)
{
    if(b[i]!=i+1)
    {
       f=1;
       break;
    }
}
if(!f)
  cout<<"Amazing";
else
  cout<<"Normal";

最后在对你的代码本身提出一些建议:

1:最好不要用long long int,占用内存,不过你用也可以。

2:你的程序是没有return 0的,建议加上。

 

0
0
梁锦程
梁锦程
高级光能
高级光能
 for(i=1;i<n;i++)
        b[i]=abs(a[i]-a[i+1]);
    sort(b+1,b+n);
    for(i=1;i<n;i++)
        if(b[i]!=i)
        {
            cout<<"Normal";
            return 0;
        }
    cout<<"Amazing";

 

0
刘睿轩
刘睿轩
中级光能
中级光能

我也是55:

#include<bits/stdc++.h>
using namespace std;
int main(){
 long long n,js;
 long long a[50000],b[50000];
     cin >> n;
     cin >> a[n];
 
     for (int i=1; i<n; i++)
     {
         b[i]=abs(a[i]-a[i+1]);
     }
     sort(a+1,a+n);
     for(int i=1;i<n;i++)
 
         if(b[i]==i) js++;

     if(js==n-1) cout<<"Amazing";
 

     else cout<<"Normal";
 

 
 return 0;
}

 

我要回答