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;
}
然后改一下,改成这样就对了:
#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;
}
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;
}