【问题标题】:Find the number of pairs (A[i], A[j]) such that i < j and A[i]**A[j] > A[j]**A[i]求出满足 i < j 且 A[i]**A[j] > A[j]**A[i] 的对数 (A[i], A[j])
【发布时间】:2014-03-30 10:22:09
【问题描述】:

我为以下问题编写了以下代码:

给定一个由 N 个正整数组成的序列 A,编写一个程序,找出满足 i A[j] > A[j]A[i](A[i] 的 A[j] 次幂 > A[j] 的 A[i] 次幂)。

我的代码通过了除此之外的所有测试用例:

15 
0 5 2 3 0 8 7 8 0 7 1 2 4 5 3

输出应该是 35,但我的程序给出的输出是 0。 我的程序如下:

#include<stdio.h>

int power(int x, int y);

int main()
{
int N,A[N],count=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
    scanf("%d",&A[i]);
}
for(int i=0;i<N;i++)
{
    for(int j=i+1;j<N;j++)
    {
        if(i<j)
        {
        if(power(A[i],A[j])>power(A[j],A[i]))
            count++;
        }
    }
}
printf("%d",count);

return 0;
}


int power(int x, int y)
{
    int result = x;

    if(y == 0) return 1;
    if(x < 0 || y < 0) return 0;

    for (int i = 1; i < y; ++i)
        result *= x;

    return result;
}

请仅在 C 语言代码中提出更正建议。

【问题讨论】:

  • 欢迎来到 SO。提问时请使用网站提供的格式化工具。除了 Gassa 在他的回答中提到的错误之外,您还应该考虑使用与 int 不同的类型。使用int,权力很容易溢出。我的猜测是你的教授的意思是你使用double,然后使用现有的库函数pow 来获得力量。
  • 我在制作这个程序时不允许使用库函数,所以我必须自己定义幂函数。关于格式化工具,我是新手,是的,我正在学习使用它们。

标签: c arrays algorithm


【解决方案1】:

声明

int N,A[N],count=0;

没有意义。在这一行上,分配数组A 时不知道N 的值。尝试为A 分配空间你知道N 的值之后。

【讨论】:

    【解决方案2】:

    将您的代码更改为:

    int main()
    {
       int N,count=0,i,j;
       scanf("%d",&N);
       int A[N];
       ...
    

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2021-04-09
      • 2021-11-11
      • 2012-10-20
      • 2021-11-03
      • 2021-11-01
      相关资源
      最近更新 更多