网易笔试题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 }

 

posted @ 2021-08-21 23:40  Dennis-Chen  阅读(105)  评论(0)    收藏  举报