2 条题解

  • 0
    @ 2023-10-6 16:35:18

    这是第一种解法,时间复杂度是O(n2)O(n^2)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,a[53],num[105],cnt=0;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	for(int i=1;i<=n;i++)
    		for(int j=i+1;j<=n;j++)
    			num[++cnt]=a[i]+a[j];
    	sort(num+1,num+cnt+1);
    	int ans=0;
    	for(int i=1;i<=cnt;i++){
    		for(int j=i+1;j<=cnt;j++){
    			if(num[i]==num[j]){
    				num[j]=1e9;
    				ans++;
    			}
    		}
    	}
    	sort(num+1,num+cnt+1);
    	cout<<cnt-ans<<endl;
    	for(int i=1;i<=cnt-ans;i++) cout<<num[i]<<" ";
    	return 0;
    }
    

    这是第二种解法,时间复杂度也是O(n2)O(n^2)不过相比第一段代码在会少一层for循环

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,a[53],num[105],cnt=0;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	for(int i=1;i<=n;i++)
    		for(int j=i+1;j<=n;j++)
    			num[++cnt]=a[i]+a[j];
    	sort(num+1,num+cnt+1);
    	int ans=cnt;
    	for(int i=1;i<ans;i++){
    		if(num[i]==num[i+1]){
    			num[i]=1e9;
    			cnt--;
    		}
    	}
    	sort(num+1,num+ans+1);
    	cout<<cnt<<endl;
    	for(int i=1;i<=cnt;i++) cout<<num[i]<<" ";
    	return 0;
    }
    
    • 0
      @ 2023-1-21 20:14:15
      #include<bits/stdc++.h>
      using namespace std;
      /*
      数组计数法
      1、循环所有的数对
      2、使用r数组来统计哪些数出现过 
      */
      int a[60],r[30];
      int n, c = 0;//c:统计出现过的数有几个 
      int main()
      {
      	cin >> n;
      	for(int i = 1; i <= n; i++){
      		cin >> a[i];
      	}
      	//循环所有的数对
      	for(int i = 1; i <= n; i++){
      		for(int j = i+1; j <= n; j++){
      			r[a[i]+a[j]]++;
      			//如果a[i]+a[j]这个数是第一次出现
      			if(r[a[i]+a[j]] == 1){
      				c++;
      			} 
      		}
      	} 
      	cout << c << endl;
      	//循环输出出现过的数
      	//任意从1~13中找2个数相加,和是2~26范围的数
      	for(int i = 2; i <= 26; i++){
      		if(r[i] != 0){
      			cout << i << " ";
      		}
      	} 
      	return 0;
      }
      
      
      
      • 1

      信息

      ID
      331
      时间
      1000ms
      内存
      16MiB
      难度
      2
      标签
      递交数
      35
      已通过
      25
      上传者