codetest
1、寻找身高相近的小朋友
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//寻找身高相近的小朋友
//输入,第一行两个整数,分别是小明身高,其他小伙伴个数,第二行是其他小伙伴的身高
//100 10
//95 96 97 98 99 101 102 103 104 105
//输出,和小明身高差绝对值小的前面,差值大的排后面,差值相同个子小的排在前面
//99 101 98 102 97 103 96 104 95 105
int h, n;
struct node{
int height;
}a[128];
bool cmp(node A, node B){
if (abs(A.height - h) !=abs(B.height - h)){
return abs(A.height- h) < abs(B.height - h);
}
return A.height < B.height;
}
int main() {
cin >> h >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i].height;
}
sort(a, a+n ,cmp);
for (int i = 0; i <n ; ++i) {
cout << a[i].height << " ";
}
return 0;
}
2、用连续自然数之和来表达整数
#include <iostream>
#include <vector>
using namespace std;
//用连续自然数之和来表达整数
//输入一个整数 9
//输出表达式和表达式个数
//9=9
//9=4+5
//9=2+3+4
//Result:3
bool isContinune(vector<int> v){
for (int i = v.size() -1; i > 0; --i) {
if (v[i] != v[i-1] -1)
return false;
}
return true;
}
int sum(vector<int> v)
{
int sum = 0;
for (int i : v)
sum += i;
return sum;
}
void print(vector<int> v, int n)
{
cout << n << "=";
if (v.size() == 1) {
cout << v[0] << endl;
return;
}
int i;
for ( i = v.size() - 1; i > 0; --i)
cout << v[i] << "+";
cout << v[i] << endl;
}
int main()
{
int n;
int sumcount = 0;
vector<int> v;
cin >> n;
for (int i = n; i >=1; --i)
{
for (int j = i; j >=1 ; --j) {
v.push_back(j);
if (sum(v) == n && isContinune(v)) {
print(v, n);
++sumcount;
v.clear();
break;
}
if (sum(v) > n) {
v.clear();
break;
}
}
}
cout << "Result:" << sumcount;
}
3、开源项目热榜
#include <bits/stdc++.h>
using namespace std;
//开源项目热榜
//输入第一行,项目个数
//第二行,权重值
//第三行开始,各个项目名字,和关注、收藏、fork、issue、MR的数量
//输出热度值降序排列,热度值相同按名字转成小写字母后字典排序
/*
4
5 6 6 1 2
camila 66 70 46 158 80
victoria 94 76 86 189 211
anthony 29 17 83 21 48
emily 53 97 1 19 218
*/
int n;
int w[5];
struct node{
string na, na_small;//na_small是全部都是小写字母的项目名称
int watch, star, fork, issue, mr;
int sum;
};
node a[128];
bool cmp(node A, node B)//重载的sort中的比较函数
{
//热度值不同的时候,按照热度值排序
if (A.sum != B.sum)
return A.sum > B.sum;
//热度值相同的时候,按照字典序排序
return A.na_small < B.na_small;
}
int main()
{
cin >> n;
for (int i = 0; i < 5; i ++ )
cin >> w[i];
for (int i = 0; i < n; i ++ )//处理输入
{
cin >> a[i].na >> a[i].watch >> a[i].star >> a[i].fork
>> a[i].issue >> a[i].mr;
a[i].sum = a[i].watch * w[0] + a[i].star * w[1] +
a[i].fork * w[2] + a[i].issue * w[3] + a[i].mr * w[4];//计算热度值
//将项目名称中的大写字母转成小写字母
for (int j = 0; j < a[i].na.size(); j ++ )
{
if (a[i].na[j] >= 'A' && a[i].na[j] <= 'Z')
a[i].na_small += a[i].na[j] + 32;
else a[i].na_small += a[i].na[j];
}
}
sort(a , a + n , cmp);//排序
//输出原来可能带大写字母的项目名称
for (int i = 0; i < n; i ++ )
cout << a[i].na << endl;
return 0;
}
4、素数之积
#include <iostream>
#include<cmath>
using namespace std;
//素数之积
//输入一个整数,因数分解,找出是那两个素数的乘积
//成功找到,从小到大输出两个素数,分解失败,输出-1 -1
/*输入15,输出 3 5*/
bool isPrimer(int num) {
bool res = true;
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0)
return false;
}
return res;
}
int main() {
int num;
cin >> num;
bool result = false;
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
if (isPrimer(num / i)) {
cout << i << " " << num / i << endl;
result = true;
break;
}
}
}
if (!result)
cout << -1 << " " << -1 << endl;
return 0;
}