题目一

%D([YITH)7$EF}44}(EEU@F.png

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

void sort(int a[], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            if (a[i] > a[j]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}

int main() {
    int n;
    scanf("%d", &n);
    int* start = (int*)malloc(sizeof(int) * n);
    int* end = (int*)malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++)
        scanf("%d%d", &start[i], &end[i]);
    sort(start, n); //开始越早排在越前面
    sort(end, n);  //结束越早排在越前面

    int j = 0;
    int sum = 0;    //会场个数 
    for (int i = 0; i < n; i++) {
        if (start[i] < end[j])
            sum++;               //如果开始时间小于结束时间则另开辟一个会场
        else
            j++;               //否则和下一个结束时间进行比较
    }

    printf("%d", sum);
    return 0;
}


题目二

NG__}`YIGSN4A%[A7QS_%AG.png


题目三

C(R68`UPB2X@7Y7_DFP2X5G.png

思路:按要求排序之后,输出m块矿石所卖的最大价格。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct node{
int w;//矿石的重量 
int p;//可以卖的价钱 
}goods;
goods g[10005];
int cmp(const void* a,const void* b)  //cmp 他决定每次都会搬重量最小的那块。如果恰好有几块重量相等,那就在这几块中挑选价值最高的带走
{  
    goods* x=(goods*)a;  
    goods* y=(goods*)b;  
    if(x->w==y->w)  
      return y->p-x->p;  
    else  
      return x->w-y->w;  
}
int main(){
int n,m;
int i;
while(scanf("%d%d",&n,&m)!=EOF){
int sum=0;
for(i=0;i<n;i++){
scanf("%d%d",&g[i].w,&g[i].p);
}
qsort(g,n,sizeof(goods),cmp);
for(i=0;i<m;i++){
sum=sum+g[i].p;
}
printf("%d\n",sum);
}
return 0;
}


题目四

FMWV%S7R125UL62K9287WF6.png

> #define _CRT_SECURE_NO_WARNINGS 1
> #include<stdio.h>
> #include<stdlib.h>
> 
> int cmp1(const void* a, const void* b) {
>     return *(int*)a - *(int*)b;//升序  } int cmp2(const void* a, const void* b) {
>     return *(int*)b - *(int*)a;//降序  }
> 
> int main() {
>     int n;//序列数
>     scanf("%d", &n);
>     int p[n], p1[n];
>     int times = 0;
> 
>     for (int i = 0; i < n; i++) {
>         scanf("%d", &p[i]);
>         p1[i] = p[i];
>     }
> 
>     for (int i = 0; i < n - 1; i++) {
>         qsort(p1, n, sizeof(int), cmp2);
>         p1[0] = p1[0] + p1[1];
>         times += p1[0] - 1;
>         p1[1] = 0;
>     }
>     printf(" %d", times);
> 
>     times = 0;
>     for (int i = 0; i < n - 1; i++) {
>         qsort(p, n, sizeof(int), cmp1);
>         p[0] = p[0] + p[1];
>         times += p[0] - 1;
>         p[1] = 100000;
>     }
>     printf("%d", times);
>     return 0; }

题目五

}T{BXE2P7EJQSFLO3SN6@M5.png

#include <bits/stdc++.h>
using namespace std;
int a[1100];

int main() {
    int n, k, t;
    cin >> n >> k;
    for (int i = 0; i <= k; i++) {
        cin >> a[i];
    }
    int m = n, cnt = 0, flag = 0;
    for (int i = 1; i < k; i++) {
        if (n < a[i] || n < a[i + 1]) {  //车最大距离也到不了加油站 
            cout << "No Solution!" << endl;
            flag = 1;
            break;
        }
        else {
            m -= a[i]; //减去该加油站和上一个加油站的距离 
            if (m < a[i + 1]) { //判断不加油能不能到达下一个加油站 
                m = n;
                cnt++;//加油次数 
            }
        }
    }
    if (!flag) cout << cnt;
    return 0;
}

Last modification:December 28, 2021
如果觉得我的文章对你有用,请随意赞赏