PTA |1064 朋友数 分数 20

121 阅读1分钟

PTA | 程序设计类实验辅助教学平台 (pintia.cn)

set

我刚开始写的是这样:

#include<iostream>
#include<set>
using namespace std;
set<int>S;

int main()
{
    int n = 0; cin >> n;
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        int temp; cin >> temp;
        while (temp)
        {
            sum += temp % 10;
            temp /= 10;
        }


        S.insert(sum);
    }

    cout << S.size() << endl;
   for(auto it=S.begin();it!=S.end();it++)
   {
       printf("%d",*it);
       if(it!=S.begin())cout<<" ";
       
   }

    return 0;
}

image.png

然后改一下,改成这样就对了:

#include<iostream>
#include<set>
using namespace std;
set<int>S;
int sovel(int temp)
{
    int sum=0;
         while (temp)
        {
            sum += temp % 10;
            temp /= 10;
        }
return sum;
}
int main()
{
    int n = 0; cin >> n;
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        int temp; cin >> temp;
   

        S.insert(sovel(temp));
    }

    cout << S.size() << endl;
   for(auto it=S.begin();it!=S.end();it++)
   {
       
       if(it!=S.begin())cout<<" ";
       printf("%d",*it);
   }

    return 0;
}

image.png

Debug

在第一个代码里面sum是全局变量,会把所有的值累加起来,所以结国会不同,如果把sum设为局部变量,答案也是对的:

#include<iostream>
#include<set>
using namespace std;
set<int>S;

int main()
{
    int n = 0; cin >> n;
 
    for (int i = 0; i < n; i++)
    {   int sum = 0; //每次清空sum
        int temp; cin >> temp;
        while (temp)
        {
            sum += temp % 10;
            temp /= 10;
        }


        S.insert(sum);
    }

    cout << S.size() << endl;
   for(auto it=S.begin();it!=S.end();it++)
   {
    
       if(it!=S.begin())cout<<" ";
          printf("%d",*it);
   }

    return 0;
}

image.png