# 面向对象的C++题目以及解法

#### 题目一：列出完数

Description:自然数中，完数寥若晨星，请在从1到某个整数范围中打印出所有的完数来。 所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如，6是完数，因为6=1+2+3。而24不是完数，因为24≠1+2+3+4+6+8+12=36。

Input:输入数据中含有一些整数n（1<n<10000）。

Output:对于每个整数n，输出所有不大于n的完数。每个整数n的输出由n引导，跟上冒号，然后是由空格开道的一个个完数，每个n的完数列表应占独立的一行。

#include<iostream>
#include<vector>
using namespace std;
class PerfectNumber {
private:
int a;
vector<int>perfect_nums;
public:
PerfectNumber(int a) :a(a) {}
void calculate(){
for (int i = 1; i <= a; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (i == sum) {
perfect_nums.push_back(i);
}
}
}
void print()const {
for (const auto& num : perfect_nums) {
cout << num << " ";
}
cout << endl;
}
};
int main() {
int n;
while (cin >> n) {
while (n != 0) {
PerfectNumber PN(n);
PN.calculate();
PN.print();
cin >> n;
}
}
return 0;
}

#### 题目二：Semi-Prime

Prime Number Definition An integer greater than one is called a prime number if its only positive divisors (factors) are one and itself. For instance, 2, 11, 67, 89 are prime numbers but 8, 20, 27 are not.Semi-Prime Number Definition An integer greater than one is called a semi-prime number if it can be decompounded to TWO prime numbers. For example, 6 is a semi-prime number but 12 is not.Your task is just to determinate whether a given number is a semi-prime number.

Input：There are several test cases in the input. Each case contains a single integer N (2 <= N <= 1,000,000]

Output：One line with a single integer for each case. If the number is a semi-prime number, then output "Yes", otherwise "No"

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
class SemiPrime {
private:
int n;
public:
SemiPrime(int n):n(n){}
bool isPrime(int  n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
bool isSemiPrime(int n) {
if (isPrime(n)) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0 && isPrime(i) && isPrime(n / i)) {
return true;
}
}
return false;
}
};
int main() {
int n;
while (cin >> n) {
SemiPrime SP(n);
//SP.isPrime(n);
if (SP.isSemiPrime(n)) {
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
return 0;
}

#### 题目三：12！配对

Description:找出输入数据中所有两两相乘的积为12!的个数。

Input:输入数据中含有一些整数n（1<2^32）

Output:输出所有两两相乘的积为12!的个数.

#include <iostream>
#include <unordered_map>
#include <vector>
#include<algorithm>
using namespace std;
const long long F12 = 479001600;
class PairCounter {
private:
unordered_map<long long, int> m;
public:
m[number]++;
}
int countPairs() {
int count = 0;
long long target = F12;
for (auto& pair : m) {
long long number = pair.first;
int a = pair.second;
if (m.count(target / number) && number != target / number) {
count += a * m[target / number];
}
else if (number * number == target) {
if (a >= 2) {
count += a * (a - 1) / 2;
}
}
}
return count / 2;
}
};
int main() {
PairCounter counter;
long long n;
while (cin >> n) {
}
cout << counter.countPairs() << endl;
return 0;
}

#include<iostream>
#include<set>
const long long int f12 = 479001600;
using namespace std;
int main(){
int num = 0;
multiset<int> s;
for (int n; cin >> n;) {
if (f12 % n == 0) {
set<int>::iterator it = s.find(f12 / n);
if (it != s.end()){
num++;
s.erase(it);
}
else{
s.insert(n);
}
}
}
cout << num << endl;
return 0;
}

#### 题目四：整数的因子数

Description:找出整数的所有因子数。 一个整数n的因子数为包含它自身的所有因子的个数。例如：12的因子数为6(1,2,3,4,6,12)。

Input:输入数据中含有一些整数n（1sn<2^32）。

Output:对于每个n，列出其所有因子数，每个n加上冒号单独列一行。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class Factor {
public:
int count(int n) {
int count = 0;
for (int i = 1; i <= sqrt(n); i++) {
if (n % i == 0) {
count += 2;
}
}
if (sqrt(n) * sqrt(n) == n) {
count--;
}
return count;
}
};
int main() {
Factor f;
int n;
while (cin >> n) {
cout << n << ":" << f.count(n) << endl;
}
return 0;
}

|
2天前
|

8 0
|
8天前
|

C++课程设计实验杭州电子科技大学ACM题目（下）
C++课程设计实验杭州电子科技大学ACM题目（下）
7 0
|
8天前
|

C++课程设计实验杭州电子科技大学ACM题目（中）
C++课程设计实验杭州电子科技大学ACM题目（中）
11 1
|
8天前
|

C++课程设计实验杭州电子科技大学ACM题目（上）
C++课程设计实验杭州电子科技大学ACM题目（上）
8 0
|
8天前
|
C++
C++程序设计实践一下（题目来自杭州电子科技大学ACM）
C++程序设计实践一下（题目来自杭州电子科技大学ACM）
12 1
|
8天前
|
C++
C++程序设计实践一上（题目来自杭州电子科技大学ACM）
C++程序设计实践一上（题目来自杭州电子科技大学ACM）
8 2
|
8天前
|

C++面向对象的四大特征
C++面向对象的四大特征
7 0
|
10天前
|

C++进阶之路：深入理解编程范式，从面向过程到面向对象（类与对象_上篇）
C++进阶之路：深入理解编程范式，从面向过程到面向对象（类与对象_上篇）
18 3
|
19天前
|
C++
c++面向对象
c++面向对象
22 0
|
1天前
|

【C++语言】继承：类特性的扩展，重要的类复用！
【C++语言】继承：类特性的扩展，重要的类复用！
11 0