两个有序链表序列的合并

描述:

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

输入样例:

1 3 5 -1
2 4 6 8 10 -1

输出样例:

1 2 3 4 5 6 8 10

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int a[N+4];
int main()
{
//  int a[N+4];
    int x = 0,t;
    while(scanf("%d",&t),t!=-1){
        a[x++] = t;
    }
    while(scanf("%d",&t),t!=-1){
        a[x++] = t;
    }
    if(a[0]!=0)
    {
        sort(a,a+x-1);
        for(int i=0; i<x; i++){
            cout << a[i];
            if(i!=x-1)
                cout << " ";
        }
    }else{
        cout << "NULL";
    }
    return 0;
}

解析:

利用数组模拟链表,接收数据之后,利用C++自带的排序函数,sort内置的快速排序,默认从小到大排列。最后输出数据。

统计素数并求和

描述:

本题要求统计给定整数MN区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数MN(1≤MN≤500)。

输出格式:

在一行中顺序输出MN区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

代码:

#include<bits/stdc++.h>
using namespace std;
int Prime[1000];
int cnt = 0;
long long sum = 0;
int num = 0;
void GetPrime(int len){
    if(len>=2){
        Prime[cnt++] = 2;
    }
    for(int i=3;i<=len;i+=2){
        int j;
        for(j=3;j<=sqrt(i);j+=2){
            if(i%j==0){
                break;
            }
        }
        if(j>sqrt(i)){
            Prime[cnt++] = i;
        }
    }
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    GetPrime(505);
    for(int i=0;i<=505;i++){
        if(Prime[i]<=m&&Prime[i]>=n){
            num++;
            sum+=Prime[i];
        }
        if(Prime[i]>m){
            break;
        }
    }
    printf("%d %lld",num,sum);
    return 0;
}

解析:

利用普通的筛选素数的方法,构建素数表,最终将满足条件的素数挑选出来,直到素数超过范围退出循环,最后输出数量和总和。


一只小菜鸡