我的编程老师给了我这个问题,用c代码编写:
给定N个整数A和数字K的数组。在转弯期间,选择所有Ai
的最大值,让它称之为MAX。然后Ai =
每MAX - Ai
完成1 <= i <= N
次。帮助Roman找出K
转动后阵列的外观。
输入
数字N和K在输入的第一行给出。然后在第二行给出N个整数,表示数组A.
输出
在一行上输出N个数字。 K转后应该是数组A.
约束
* 1 <= N <= 10^5
* 0 <= K <= 10^9
* Ai does not exceed 2 * 10^9 by it's absolute value.
实施例
Input:
4 1
5 -1 7 0
Output:
2 8 0 7
我的问题代码是:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long int Max(long int *arr, int low, int high)
{
long int max,i;
max = arr[low];
for(i=0;i<=high;i++)
{
if(max<=arr[i])
max = arr[i];
}
return max;
}
/* Driver program to test above function */
int main()
{
long int max,*arr;
long int n,k,c1,c2,c3,i,j;
c1 = (long int)pow(10,5);
c2 = (long int)pow(10,9);
c3 = 2*c2;
scanf("%ld %ld",&n,&k);
if(n<1||n>c1)
exit(1);
else if(k<0||k>c2)
exit(1);
else
{
arr = (long int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%ld",&arr[i]);
if(abs(arr[i])>c3)
exit(1);
}
if(k%2 == 0)
{
for(i=0;i<2;i++)
{
max = Max(arr, 0, n-1);
for(j=0;j<n;j++)
{
arr[j] = max-arr[j];
if(abs(arr[j])>c3)
exit(1);
}
}
}
else if(k%2 != 0)
{
max = Max(arr, 0, n-1);
for(j=0;j<n;j++)
{
arr[j] = max-arr[j];
/*if(abs(arr[j])>c3)
exit(1);*/
}
}
/* for(m=0;m<n;m++)
printf("%ld ",arr[m]);
printf("\n");*/
for(i=0;i<n;i++)
printf("%ld ",arr[i]);
printf("\n");
}
return 0;
}
我在gcc
中的ubuntu
编译器上执行了此代码,它完全满足所有约束条件,但是当我将此代码上传到我的老师的门户网站时,它有一个编译器并执行代码,它说Runtime
错误 -
nzec which means a non-zero exception which is used to signify that main() does not have "return 0;" statement or exception thrown by c++ compiler
。
拜托,任何人都可以帮我解决我的代码中出现的错误,因为返回0;我的代码中的陈述。请帮助。
每个人都指出多次使用退出...我可以使用任何其他方式来减少退出()吗?
答案 0 :(得分:1)
我的猜测是它与错误条件的各种exit(1)
语句有关。
答案 1 :(得分:1)
正如戴夫·科斯塔所指出的,exit(1)
可能是原因
另一个可能的问题是分配的数组的大小:
arr = (long int *)malloc(sizeof(int)*n);
应该是:
arr = malloc(sizeof(long int)*n);
请注意,您不需要将pow
用于常量:
c1 = (long int)pow(10,5);
c2 = (long int)pow(10,9);
可以替换为:
c1 = 1e5L;
c2 = 1e9L;