T10

题意:在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要 (C) 条边。

A,n

B,n + 1

C,n - 1

D,n - 2

错误原因:以为只有连成一个圈才算,但是可以在一个圈的基础上去掉一条边

T14

题意:关于C++语言描述错误的是(B)

A,C++是面向对象的编程语言

B,C++源代码能在Linux环境中直接执行

C,在C++程序中能直接导入C语言的常用头文件,不会报错

D,导入头文件后,C++能直接调用Windows系统命令

思路:C++源代码能在Linux环境中需要先编译,再执行

T15

题意:有2N个数,需要求出最大值和最小值,你需要的最少比较次数是(C)。

A,2N + 1

B,2N + 2

C,3N - 2

D,4N - 3

思路:可以用for循环遍历,i每次+= 2,先比较i, i + 1,再让大的和max比,小的和min比

阅读程序1

#include<iostream>
using namespace std;
int count=0, weight[1001], a[7];
int main() {
    for(int i=1;i<=6;i++){
         cin>>a[i];
    }
    for (int x1=0; x1<=a[1]; x1++)
        for (int x2=0; x2<=a[2]; x2++)
            for (int x3=0; x3<=a[3]; x3++)
                for (int x4=0; x4<=a[4]; x4++)
                    for (int x5=0; x5<=a[5]; x5++)
                        for (int x6=0; x6<a[6]+1; x6++)
                        {
                            int w=1*x1+2*x2+5*x3+10*x4+20*x5+50*x6;
                            weight[w]++;
                        }
    for (int i=0; i<=1000; i++)
        if (weight[i]>0) count++;
    cout<<count;
    return 0;
}

这个代码先是让桶数组存一些数,再数有几个桶里面有数

阅读程序2

#include<iostream>
using namespace std;
int n;
char s[4096]; 
int fun(int start, int length)
{
    if(length == 0){
        cout << (s[start]=='0'?'A':'B');
        return s[start] - '0';
    }
    int p = 1<<(length-1);
    int l = fun(start,length-1);
    int r = fun(start+p,length-1);
    if( l==r && l!=2 )
    {
        cout << (l==0?'A':'B');
        return l;
    }
    else{
        cout<<'C';
        return 2;
    }
}
int main()
{
    cin >> n;
    cin >> s;
    fun (0, n);
    return 0;
}

这段代码用了递归,把一个字符串改成了A,B,C的形式

阅读程序3

#include<bits/stdc++.h>
using namespace std;
int n, m, ans, p[101], e[101];
int pow1(int x, int w) {
    int res = 1;
    for (int i = 1; i <= w; i++) {
        res = res * x;
    }
    return res;
}
int main() {
    cin >> n;
    int i = 2;
    while (n != 1) {
        if (n % i == 0) {
            m++;
            p[m] = i;
            e[m] = 0;
            while (n % i == 0) {
                e[m]++;
                n = n / i;
            }
        }
        i++;
    }
    ans = 1;
    for (int i = 1; i <= m; i ++) {
        ans = ans * (p[i] - 1) * pow1(p[i], e[i] - 1);
    }
    cout << ans << endl;
}

这段代码是先把n分解质因数,再算出一个ans

完善程序1

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n, num, mid, t;
ll a[10000001], b[1000001];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    int i = n;
    while (i > 1) {
        if (a[i] > a[i - 1]){
            num++;
            b[num] = a[i];
        }
        else{
            num++;
            b[num] = a[i];
            num++;
            b[num] = a[i - 1];
            mid = i - 2;
            break;
        }
        i--;
    }
    if (i == 1) cout << "No NextPermutation";
    else{
        for (i = 1; i <= num - 1; i++)
            if (④){
            t = b[i];
            b[i] = b[num];
            b[num] = t;
            break;
        }
        for (i = 1; i <= mid; i++)cout << a[i] << " ";
        cout << b[num] << " ";
        for (i = 1; i <= num - 1; i++) cout << b[i] << " ";
        cout << endl;
    }
}

输入一个正整数n以及n个不同的正整数。这个数可以理解为n的一种排列,假设(1,2,3,4,…,n)是第1个排列,(n,n−1,…,1)是最后一个排列,根据这n个数组成的排列,输出下一个排列

完善程序2

#include <iostream>
using namespace std;
const int MAXN = 5000;
int n;
struct segment { 
    int a, b;
}A[MAXN];
void sort() // 排序
{
    for (int i = 0; i < n; i++)
        for (int j = i+1; j <= n - i; j++)
            if (A[i].a > A[j].a)
            {
                swap(A[i],A[j]); //交换两个变量
            }
}
int main(){
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> A[i].a >> A[i].b;
    sort();
    int ans =1, r = n;
    for (int i = 1; i < n; i++)
    {
        if(A[i].a >= r){
            ans = ans + 1;
            r = A[i].b;
        }
    }
    cout << ans << endl;
    return 0;
}

数轴上有n个开区间(a[i],b[i])(a[i],b[i])。选择尽量多的区间,使这些区间两两没有公共点。 给出 n 个区间,第i个区间的左右端点是a[i],b[i],a[i],b[i]。现在要在这些区间中选出若干个,使这些区间两两没有公共点。保证答案存在,求可选区间个数的最大值。 注:认为区间[3,5][5,9]没有公共交点,可以同时选择,认为区间[3,6][5,9]有公共交点,不可以同时选择。 输入第一行包含一个整数n,接下来 n 行,每行两个整数a[i],b[i],a[i],b[i]。使用贪心法解决这个问题。先用冒泡排序的思路进行结构体数组排序,然后依次抉择每个区间。