我正在尝试解决2个小时。那是任务: 给定整数数组,找到具有最大乘积的相邻元素对并返回该乘积。
示例
对于inputArray = [3,6,-2,-5,7,3],输出应为 neighborElementsProduct(inputArray)= 21。
7和3产生最大的产品。
那是我的解决办法。
#include <stdio.h>
struct birthdate {
int day;
char month[9];
int year;
};
typedef struct birthdate dob;
struct info {
char name[40];
dob birthdate;
int age;
char sex[6];
char *origin;
};
void printinfo(struct info user) {
printf("---- User Data ----\n");
printf("Name: %s\n", user.name);
printf("Date of birth: %d/%s/%d\n", user.birthdate.day,
user.birthdate.month, user.birthdate.year);
printf("Age: %d\n", user.age);
printf("Sex: %s\n", user.sex);
printf("Country of origin: %s", user.origin);
}
int main() {
printf("--Please enter your info--\n");
struct info user;
printf("Please enter your name: ");
scanf_s("%s", &user.name); // <-- exception thrown here
printf("Please enter your date of birth in the format (dd/mm/yyyy): ");
scanf_s("%d %s %d", &user.birthdate.day, &user.birthdate.month,
&user.birthdate.year);
printf("Please enter your age: ");
scanf_s("%d", &user.age);
printf("Please enter your gender ([M]ale/[F]emale): ");
scanf_s("%s", &user.sex);
printf("Please enter your country of origin: ");
scanf_s("%s", &user.origin); // <- Another exception thrown here
printf("\n\n");
printinfo(user);
printf("\nPress ENTER to continue..");
getchar();
return 0;
}
当然,我可以找到另一个(可能更短)的解决方案,但是我很好奇为什么我的系统无法正常工作。谢谢。
编辑:警告是因为我们从0开始而不是从1开始数组,所以在我的循环中它将是 inputArray.length-1 代替 inputArray.length 我还尝试了另一种解决方法,那就是我的2种解决方案:
int adjacentElementsProduct(int[] inputArray) {
int[] tab = new int[29];
int len = inputArray.length;
for(int a = 0, int b = 1; a < len; a++, b++)
{
tab[a] = inputArray[a] * inputArray[b];
}
int max = -100;
for(int i = 0; i < tab.length; i++)
{
if (tab[i] > max)
max = tab[i];
}
return max;
}
第二个:
int adjacentElementsProduct(int[] inputArray) {
int[] tab = new int[inputArray.length - 1];
for(int a = 0; a < inputArray.length - 1; a++)
{
tab[a] = inputArray[a] * inputArray[a+1];
}
int max = -10000000;
for(int i = 0; i < inputArray.length - 1; i++)
{
if (max < tab[i])
max = tab[i];
}
return max;
}
但是感谢@ cricket_007和@AhmadWabbi的帮助:)
答案 0 :(得分:-2)
Java单线解决方案,利用地图功能
int adjacentElementsProduct(int[] inputArray) {
return IntStream.range(1, inputArray.length).map(i->inputArray[i]*inputArray[i-1]).max().getAsInt();
}
JavaScript一线解决方案
function adjacentElementsProduct(inputArray) {
return Math.max(...arr.slice(1).map((x,i)=>[x*arr[i]]))
}