网易笔试题2021_001
题目描述:
对于一个整形数组,里面任何两个元素相加,小于等于M的组合有多少种,如果有符合的,输出组合对数;
输入描述:
输入有2行,第一行为int整型数组,第二行为M值,且M也为int整型数字,比如:
7 -1 -1
9
表示数组为(7,-1-1) ,M = 9
输出描述:
里面任何两个元素小于等于9的组合有3种,分别是(7,第二个元素 -1)、(7,第三个元素 -1)、(第二个元素 -1,第三个元素 -1)。不同位置的相同元素值,但可以组成不同的组合。
故输出:3
示例一:
输入:
7 -1 -1
9
输出:
3
解法一:(C语言)
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int i=0,n=1; 7 int countNum =0; 8 int num1,num2; 9 int *a=(int*)malloc(n*sizeof(int)); 10 char b; 11 while((b=getchar())!='\n') 12 { 13 ungetc(b,stdin); 14 scanf("%d",&a[i++]); 15 a = (int*)realloc(a,++n*sizeof(int)); 16 } 17 int M =0; 18 scanf("%d",&M); 19 for (int j=0; j<n-1; j++) 20 { 21 num1 = a[j]; 22 for(int k=j+1; k<n-1; k++) 23 { 24 num2 = a[k]; 25 if(num1+num2<=M)countNum++; 26 } 27 } 28 29 printf("%d",countNum); 30 31 free(a); 32 a = NULL; 33 return 0; 34 }
解法二:(C++)
1 #include<iostream> 2 #include<vector> 3 4 const int maxsize = 10; 5 6 using namespace std; 7 8 int main() 9 { 10 int length = 0; 11 vector<int>a; 12 int temp; 13 while(cin>>temp) 14 { 15 a.push_back(temp); 16 length++; 17 if(cin.get()=='\n') 18 break; 19 } 20 21 int m,result=0; 22 cin>>m; 23 24 for(int i=0; i<length; i++) 25 { 26 for(int j=i+1; j<length; j++) 27 { 28 if(a[i]+a[j]<=m) 29 result++; 30 } 31 } 32 33 cout<<result; 34 return 0; 35 }

浙公网安备 33010602011771号