codetest

1、寻找身高相近的小朋友

#include 
#include 

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 
#include 

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 

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 
#include
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;
}

5、靠谱的车

#include 
#include 
#include 

using namespace std;

//靠谱的车
//输入一个整数,输出实际产生的费用

// 函数用来计算跳过所有4的实际读数
int actualCost(int n) {
    int result = 0; // 存储实际的读数
    int multiplier = 1; // 数字的位置权重
    while (n > 0) {
        int digit = n % 10; // 获取当前数字的最后一位
        n /= 10; // 移除当前处理的最后一位
        if (digit > 4) {
            digit--; // 如果数字大于4,由于跳过4,所以减1
        }
        result += digit * multiplier; // 根据位置添加到最终结果
        multiplier *= 9; // 调整权重(由于每一位可能的数字现在只有9个:0-3, 5-9)
    }
    return result;
}

int main() {
    int N;
    cin >> N; // 读取输入
    cout << actualCost(N) << endl; // 输出实际费用
    return 0;
}

6、执行时长

#include 
using namespace std;
//执行时长
//输入三行,最多执行的任务数、任务数组长度、任务数组元素(代表每秒新增的任务数)
//输出执行任务所需时间
/*
3
5
1 2 3 4 5
*/
int main() {
    int n, size;
    cin >> n >> size;
    int a = 0;
    int ans = size;
    int tmp;
    int i = 0;
    while(i < size)
    {
        cin >> tmp;
        a = a + tmp;
        if(a < n)
            a = 0;
        else
            a = a - n;
        i++;
    }
    ans = ans + a/n;
    if(a % n != 0)
        ans ++;
    cout<<ans;
    return 0;
}

你可能感兴趣的:(算法,数据结构)