2022秋-北邮计导期末考试(BUPT大一上)

函数题:

第一题:

现有两个数组A和B,你的任务是根据指定位置将B中全部元素插入到A中去。

输入格式:

第一行为三个用空格分隔的整数m,n,pos,依次代表数组A中元素的个数,数组B中的元素的个数和插入的位置;

第二行为m个用空格分隔的整数,为A中元素;

第三行为n个用空格分隔的整数,为B中元素。

输出格式:

只有一行,为m+n个用空格分隔的整数,为插入后A中元素。测试用例保证m,n均大于0,且0<=pos<=m,m+n<=100。完成这个题目你需要设计两个函数。

函数接口定义:
void create( int array[],int num);

该函数的功能是将num个整数读入数组aray 中,其中array和num都是用户传入的参数。array为用于保存整数的数组名;num为读入元素的个数。函数没有返回值。

void insert(int A[],int B[],int lenA,int lenB,int pos);

A、B、lenA、len和ps都是用户传入的参数。其中A和B为待操作数组;lenA和len分别代表数组A和

数组B中元素的个数;pos代表插入的起始位置。函数没有返回值。

该函数的功能是将数组B中的全部元素依次插入到数组A中。插入的起始位置为pos,例如:pos等于3,则B[0]插入后处于A[3]的位置,B[1]插入后处于A[4]的位置,后续元素依此类推。插入的同时数组A中从poS开始的各个元素要依次后挪。

输入样例:
9 3 3
1 2 3 4 5 6 7 8 9
11 12 13
输出样例:
1 2 3 11 12 13 4 5 6 7 8 9

程序代码:

#include<stdio.h>
#define MAX 100
void insert(int A[], int B[], int lenA, int lenB, int pos);
void create(int array[], int num);
int main()
{
    int A[MAX], B[MAX];
    int i, m, n, pos;
    scanf("%d%d%d", &m, &n, &pos);
    create(A, m);
    create(B, n);
    insert(A, B, m, n, pos);
    for (i = 0; i < m + n; i++)
    {
        if (i == m + n - 1) printf("%d\n", A[i]);
        else printf("%d ", A[i]);
    }
    return 0;
}
//请在这里输入答案
void create(int array[], int num)
{
    int i;
    for (i = 0; i < num; i++)
    {
        scanf("%d", &array[i]);
    }
}
void insert(int A[], int B[], int lenA, int lenB, int pos)
{
    int i;
    int *p,*q;
    p = &A[pos];
    q = &B[lenB];
    for(i=pos;i<lenA;i++)
    {
        *q = *p;
        q++; p++;
    }
    p = &A[pos];
    q = &B[0];
    for(i=pos;i<lenA+lenB;i++)
    {
        *(p++) = *(q++);
    }
}

第二题:

请写一个递归函数,该函数的功能为查找一个整数数组中从某个位置开始后边所有整数的最小值。

输入格式:

共2行,第一行为一个整数n(0<n<=100),代表数组中共n个整数;第二行为用空格分隔的n个整数,为待查找整数。

输出格式:

共n+1行,前n行依次为后1个整数的最小值、后2个整数的最小值,以此类推直到全部n个整数的最小值。最后一行为全部n个整数的最小值。具体格式见样例。

测试用例保证所有整数可以用int类型存储。

**需要注意的是前n行要在递归函数中输出,最后一行由主函数输出。**

注意:此题要求递归求解,且不允许使用全局变量、静态变量等等。

函数接口定义:
int findlMin(int numbers[],int first,int n);

其中numbers、first和n都是用户传入的参数。numbers为待查找数组;first为查找的起始位置;n为数组中元素的总个数。函数须返回查找到的最小值。

输出样例:
9
1 2 3 4 5 6 7 8 9
输出样例:
9
8
7
6
5
4
3
2
1
min = 1
思路分析:

这道题非常折磨的地方在于如何实现在递归函数中输出前n行,这里切记:

  1. 为保证输出时不出现重复,一定要自己定义一个数(如int ch)去储存返回结果时可能会用到多次的下一次递归结果。

  1. 用一个数组a[n]来做旗帜,记录已经打印过的结果,避免重复答应(如a[first]=0表示还没打印,a[first]=1表示打印过了。

程序代码:

#include<stdio.h>
#define MAX 100
int findMin(int numbers[], int first, int n);
int main()
{
    int i, n, numbers[MAX];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &numbers[i]);
    printf("min = %d\n", findMin(numbers, 2, n));
    return 0;
}
//请在这里输入答案
int findMin(int numbers[], int first, int n)
{
    int t = first;
    int a[100]={0};
    if (first == n - 1)
    {
        if(a[first]==0)
        {
            printf("%d\n", numbers[n - 1]);
                 a[first]=1;
        }
        return numbers[n - 1];
    }
    else
    {
        int ch=findMin(numbers, t + 1, n);
        if(a[first]==0)
        {
            printf("%d\n", numbers[t] < ch ? numbers[t] : ch);           
          a[first]=1;
        }
        return numbers[t] < ch?numbers[t]: ch;
    }
}

第三题:

X公司最近研究出了一种新的编码方式,这种编码是将一串大写字母转化为数字。下面是每个字母所代表的数字。

B,F,P,V代表1

C,G,J,K,Q,S,X,Z代表2。

D,T代表3

L代表4

M,N代表5

R代表6。

另外字母A,E,1,0,U,H,W.Y不代表任何数字。你需要将每个字母转化为所代表的数字,但注意,如果连续几个字母都代表同一个数字,那么你只需要转化成一个数字就可以。比如PFP和F都代表1,所以你只需要输出一个1,而不是两个1。不代表数字的字母不用转化。

输入格式:

第一行为整数T(0<T<10)代表T组测试数据

每行一个只含大写字母的字符串,串长不超过20。

输出格式

共T乘2行,每两行依次对应一行输入;其中第一行输出所转化后的数字编码,如果没有任何编码,输出一个空行:第二行输出转化后编码的长度。

你需要设计一个函数来完成此编码功能。

函数接口定义:
int code(char s[]);

其中s是用户传入的参数,代表待编码字符串;函数的返回值为编码后的长度。注意,你的编码函数要输出编码后的结果,而编码后的长度在主函数里输出了,所以无需在编码函数中输出。

输入样例:
3
KHAWN
PFISTER
BOBBY
输出样例:
25
2
1236
4
11
2
思路分析:

建立数组储存每个字母,用数组下标表示对应数字,然后将0剔除掉

程序代码:

#include<stdio.h>
int code(char s[]);
int main()
{
    int T;
    char s[64];
    scanf("%d", &T);
    while (T--)
    {
        scanf("%s", s);
        printf("%d\n", code(s));
    }
    return 0;
}
//请在这里填写答案
int code(char s[])
{
    char a[7][9] = { {'A','E','I' ,'O' ,'U' ,'H' ,'W' ,'Y'} ,{'B' ,'F' ,'P' ,'V'} ,{'C' ,'G' ,'J' ,'K' ,'Q' ,'S' ,'X' ,'Z'} ,{'D' ,'T'} ,{'L'} ,{'M' ,'N'} ,{'R'} };
    int i, j,b[20];
    int k = 0, t = 0;
    while (s[k] != '\0')
    {
        for (i = 0; i < 7; i++)
        {
            for (j = 0; j < 9; j++)
            {
                if (s[k] == a[i][j])
                { 
                    b[t++] = i; break;
                }
            }
            if (j != 9)
                break;
        }
        k++;
    }
    int c[20], q = 0;
    for (i = 0; i < t; i++)
    {
        if ((b[i] != b[i - 1] && b[i] != 0)||i==0&&b[i]!=0)
            c[q++] = b[i];
    }
    for (i = 0; i < q; i++)
    {
        printf("%d", c[i]);
    }
    printf("\n");
    return q;
}

第四题:

五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的 棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。假设棋盘为19X19路的 棋盘,棋盘的左上角的坐标为(1.1),它右边的一个点为(1,2),再右边一个点为(1,3);左上角下边一个点为(2.1);依此类推最右下角的坐标为(19,19)。现给出5个点的坐标,你写一段程序判断这5个点是否在横向或者纵向上紧密的连成一排(也就是五子棋获胜的两种情况)。

输入格式:

共5行,每行为两个整数,依次代表一颗棋子的行坐标和列坐标(测试数据保证合法)。

输出格式:

共6行,

第1行,如果这五颗子在棋盘上的横向或纵向上紧密的连成一排,则输出WIN,否则输出NO

后5行,无论第1行输出什么,后5行均将输入的5个坐标排序后输出,每行一个坐标。同一行内先输出行坐标后输出列坐标,中间用一个空格分隔;5个坐标输出的顺序为行坐标小的先输出,如果行坐标相同则列坐标小的先输出。具体见样例。

为了实现此功能,你要设计的两个函数如下:

函数接口定义:
PIECE * getMemory( int n ) ;

该函数的功能为创建一个长度为n的PIECE型(该类型定义见裁判测试程序样例)动态一维数组,并返回动态数组第一个元素的地址。其中n是用户传入的参数,代表数组的长度。函数的返回值为该数组的首元素地 址。

int check( PIECE * pieces , int n ) ;

该函数的功能为判断给定的数组内的5个棋子是否符合题目要求同时按题目要求将各个棋子排好序。其中pieces和n是用户传入的参数,pieces为指向保存棋子的数组的指针,n代表数组的内元素的个数。如果符合题目要求则函数返回1,否则函数返回0。

输入样例:
1 1
1 2
1 3
1 4
1 5
输出样例:
WIN
1 1
1 2
1 3
1 4
1 5
思路分析:
  1. 题目给了头文件#include <stdlib.h>就可以使用快速排序qsort()函数

  1. 题目中五子棋的获胜方式只有两种,没有斜方向的答案

  1. 动态存储malloc函数的原型是(void*)malloc(int size),用指针时要对其进行强制转换才能返回对应类型的首地址

程序代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct piece
{
    int x;
    int y;
} PIECE;//保存一个棋子坐标的结构 
PIECE* getMemory(int n);
int check(PIECE* pieces, int n);
int main()
{
    PIECE* pieces;
    int i;
    const int  num = 5;
    pieces = getMemory(num);
    if (pieces == NULL)
        return -1; //这里的return是因为没有获得内存而直接结束程序。
    for (i = 0; i < num; i++)
    {
        scanf("%d%d", &pieces[i].x, &pieces[i].y);
    }
    if (check(pieces, num))  printf("WIN\n");
    else  printf("NO\n");
    for (i = 0; i < num; i++)
    {
        printf("%d %d\n", pieces[i].x, pieces[i].y);
    }
    free(pieces);
    return 0;
}
//请在这里填写答案
int cmp(const void* a, const void* b)
{
    PIECE* a1 = (PIECE*)a; PIECE* b1 = (PIECE*)b;
    if (a1->x != b1->x)
        return a1->x - b1->x;
    else
        return a1->y - b1->y;
}
PIECE* getMemory(int n)
{
    PIECE* p;
    p = (PIECE*)malloc(sizeof(PIECE) * n);
    return p;
}
int check(PIECE* pieces, int n)
{
    qsort(pieces, n, sizeof(PIECE), cmp);
    int i, j;
    int flag1 = 0,flag2=0;
    for (i = 0; i < n-1; i++)
    {
        if (pieces[i].x == pieces[i + 1].x && pieces[i].y == pieces[i + 1].y - 1)
            flag1++;
        else if (pieces[i].y == pieces[i + 1].y && pieces[i].x == pieces[i + 1].x - 1)
            flag2++;
    }
    if (flag1 == n - 1 && flag2 == 0 || flag2 == n - 1 && flag1 == 0)
        return 1;
    else
        return 0;
}

编程题:

第一题:

众所周知,2022年卡塔尔世界杯于2022年11月20日至12月18日在卡塔尔境内8座球场举行。最后阿根廷队通过点球大战取胜法国队,赢得大力神杯。世界杯期间各球队除了比赛,训练也很重要。某球队在一次训练中教练把球员分成3组进行分组对抗。分组的依据是球员的号码,号码可以整除3的一组,号码除以3余1的一组,号码除以3余2的一组。现请你写一段程序帮助教练分组。

输入格式:

共两行,第一行为一个整数n(0<n<=100),代表球员个数,第二行为n个用空格分隔的整数,代表每个球员号码。

输出格式:

只有一行,为n个整数,代表分组后的结果。每个整数之间用1个空格分隔,最后一个整数后无空 格,为一个换行符。输出顺序为:最前边输出号码能被3整除的,中间输出号码除以3余1的,最后输出号码除以3余2的。如果两个号码除以3的余数相同,则按原顺序输出,也就是说在输入中在前边的数在输出中仍然在前边。

测试用例保证所有整数均可以用int存储。

输入样例:
11
1 2 3 4 5 6 7 8 9 10 11
输出样例:
3 6 9 1 4 7 10 2 5 8 11
思路分析:

这一题难度不大,主要是要考虑换行符的出现,测试样例可能出现没能分出三组的情况

程序代码:

#include<stdio.h>
int main()
{
    int n;
    int a[100];
    scanf("%d",&n);
    int i;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    int b[3][100];
    int c[3] = { 0 };
    for (i = 0; i < n; i++)
    {
        b[a[i] % 3][c[a[i]%3]++] = a[i];
    }
    for (i = 0; i < c[0]; i++)
    {
        if(c[1]!=0)
        printf("%d ", b[0][i]);
        else
            printf("%d%c", b[0][i], i == c[0] - 1 ? '\n' : ' ');
    }
    for (i = 0; i < c[1]; i++)
    {
        if (c[2] != 0)
        printf("%d ", b[1][i]);
        else
            printf("%d%c", b[1][i], i == c[1] - 1 ? '\n' : ' ');

    }
    for (i = 0; i < c[2]; i++)
    {
        printf("%d%c", b[2][i], i == c[2] - 1 ? '\n' : ' ');
    }
    return 0;
}

第二题:

有一个由按钮灯(该物体即是按钮也是灯)组成的矩阵,每次按下某个按钮灯后,该按钮灯及该灯的左上、右上、左下、右下的 按钮灯的状态都会改变一次。即,如果灯原来是点亮的,就会被熄灭:如果灯原来是熄灭的,则会被点亮。注意当按一次在矩阵角上的 按钮灯时只能改变2个按钮灯的状态;当按一次在矩阵边缘上的按钮灯时只能改变3个按钮灯的状态;现请你写一段程序,根据按钮灯矩阵的初始状态及按按钮的过程给出按钮灯矩阵的最终状态。

输入格式:

第一行为两个正整数m,n,分别代表矩阵的行数和列数(0<m,n<10)接下来是m行n列个整数,代表按钮灯的 初始状态(1代表灯是点亮的,0代表灯是熄灭的);接下来一行为一个整数t(0<t<20),代表共按了t次按钮;最后t行,每行为用空格分隔的两个整数,分别代表每次按下的按钮灯的坐标。如11代表按了最左上角的按钮灯,12代表按 了第1行第2列的按钮灯等等,以此类推。

输出格式:

为一个mXn的整数矩阵,代表按钮灯的最终状态(1代表灯是点亮的,0代表灯是熄灭的)。注意灯的状态之间用1个空 格分隔,但行末没有空格。具体见样例。

输入样例:
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
1
4 5
输出样例:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 1 0 1
0 0 0 0 1 0
0 0 0 1 0 1
易错点:

看清题目要求的方向,不是正上下左右,而是斜上下左右。

程序代码:

#include<stdio.h>
int main()
{
    int m, n;
    int a[10][10]={0};
    scanf("%d %d", &m, &n);
    int i, j;
    for (i = 1; i <=m; i++)
    {
        for (j = 1; j <=n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    int t;
    scanf("%d", &t);
    int a1, b1;
    for (i = 0; i < t; i++)
    {
        scanf("%d %d", &a1, &b1);
        if (a1 == 1 && b1 == 1)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1+1][b1+1]= (a[a1+1][b1+1] == 0 ? 1 : 0);
        }
        else if (a1 == 1 && b1 == n)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 + 1][b1-1] = (a[a1 + 1][b1-1] == 0 ? 1 : 0);
        }
        else if (a1 == m && b1 == 1)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 - 1][b1+1] = (a[a1 - 1][b1+1] == 0 ? 1 : 0);
        }
        else if (a1 == m && b1 == n)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1-1][b1 - 1] = (a[a1-1][b1 - 1] == 0 ? 1 : 0);
        }
        else if (a1 == 1)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 + 1][b1-1] = (a[a1 + 1][b1-1] == 0 ? 1 : 0);
            a[a1+1][b1 + 1] = (a[a1+1][b1 + 1] == 0 ? 1 : 0);
        }
        else if (b1 == 1)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 - 1][b1+1] = (a[a1 - 1][b1+1] == 0 ? 1 : 0);
            a[a1 + 1][b1+1] = (a[a1 + 1][b1+1] == 0 ? 1 : 0);
        }
        else if (a1 == m)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 - 1][b1-1] = (a[a1 - 1][b1-1] == 0 ? 1 : 0);
            a[a1-1][b1 + 1] = (a[a1-1][b1 + 1] == 0 ? 1 : 0);
        }
        else if (b1 == n)
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1 - 1][b1-1] = (a[a1 - 1][b1-1] == 0 ? 1 : 0);
            a[a1 + 1][b1-1] = (a[a1 + 1][b1-1] == 0 ? 1 : 0);
        }
        else
        {
            a[a1][b1] = (a[a1][b1] == 0 ? 1 : 0);
            a[a1+1][b1 + 1] = (a[a1+1][b1 + 1] == 0 ? 1 : 0);
            a[a1+1][b1 - 1] = (a[a1+1][b1 - 1] == 0 ? 1 : 0);
            a[a1 - 1][b1-1] = (a[a1 - 1][b1-1] == 0 ? 1 : 0);
            a[a1 - 1][b1+1] = (a[a1 - 1][b1+1] == 0 ? 1 : 0);

        }
    }
    for (i = 1; i <= m; i++)
    {
        for (j = 1; j <= n; j++)
        {
            printf("%d%c", a[i][j],j==n?'\n':' ');
        }
    }
    return 0;
}

第三题:

烽火台,又称烽燧,俗称烽堠、烟墩、墩台。古时用于点燃烟火传递重要消息的高台,是古代重要军事防御设施,是为防止 敌人入侵而建的, 遇有敌情发生,则白天施烟,夜间点火,台台相连,传递消息。是最古老但行之有效的消息传递方式,它可以说是现代通信的雏形。现有烽火台若干,但它们之间的通信已不用这种古老的方式了。为了保证所有烽火台之间通信的可靠性,设计者为每对烽火台之间都铺设了一对专门的通信线录。假设所有的烽火台都在一条直线上,请你写一段程序计算一下这些通信线路的总长度。

样例解释:

坐标为1的烽火台向外的通信线 路总长:1+2+3+4=10;

坐标为5的烽火台向外的通信线路总长:4+3+2+1=10;

坐标为3的烽火台向外的 通信线路总长:2+1+1+2=6;

坐标为2的烽火台向外的通信线路总长:1+1+2+3-7;

坐标为4的烽火台向外的通信线 路总长:3+2+1+1=7

通信线路总长为:10+10+6+7+7=40

输入格式:

共两行,第一行为一个整数n(1<=n<=10000),代表同n个烽火台:第二行为n个用空格分隔的整数(这些整数均大于0且不相等),代表每个烽火台的坐标。

输出格式:

只有一行,为一个整数,代表通信线 路总长度。测试用例保证所有整数都可以用int存储,包括总长度。

输入样例:
5
1 5 3 2 4
输出样例:
40

程序代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int cmp(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}
int main()
{
    int n;
    scanf("%d", &n);
    int i, j;
    int a[10005];
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    qsort(a, n, sizeof(int), cmp);
    int sum = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            sum = sum + abs(a[j] - a[i]);
        }
    }
    printf("%d\n", sum);
    return 0;
}

第四题:

烽火台,又称烽燧,俗称烽堠、烟墩、墩台。古时用于点燃烟火传递重要消息的高台,是古代重要军事防御设施,是为防止 敌人入侵而建的,遇有敌情发生,则白天施烟,夜间点火,台台相连,传递消息。是最古老但行之有效的消息传递方式,它可以说是现代通信的雏形。现有烽火台若干(哈哈,它们就是烽火台一里的那些烽火台)。现在的问题是,烽火台有了,通信也得到有效的保障但没有足够的哨兵。所以只能在部分烽火台上放置观察哨。为了提高观察效率上级设计了任意两个哨兵间的最小距离最大的哨兵安 排策 略。现请你写一个 程序实现这个策略。

样例解释:

3个哨兵分别放在1、4和8(或1,4,9),它们之间的最小距离为3。其他方案最小距离均小于3,所以3是要求的最大值。

输入格式:

只有两行,第一行为两个用空 格分隔的整数n和 m(2<=m<=n<=10000),依次代表烽火台的个数和哨兵的个数:第二行为n个用空格分隔的整数,代表烽火台的坐标(依然假设所有烽火台在同一直线上),这些整数均大于等于0小于等于10^9,且互不相等。

输出格式:

只有一行,为一个整数,代表所求得的最大值。测试用例保证所有整数都可以用int存储。

输入样例:
5 3
1 2 8 4 9
输出样例:
3
思路分析:
  1. 类似地最小值最大化问题和最大值最小化都是采用二分法

  1. 使用二分查找前先排序

程序代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int cmp(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}
int main()
{
    int n, m;
    scanf("%d %d", &n,&m);
    int i, j;
    int a[10005];
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    qsort(a, n, sizeof(int), cmp);
    int left = 0, right = a[n-1] - a[0];//left理解成两个哨兵站同一个烽火台,right为分别站最左和最右
    while (left <= right)
    {
        int cnt = 1, k = 0;//cnt计算所有符合条件的数字,k一定从0开始(贪心算法)
        int mid = (left + right) / 2;//假设的最小值
        for (i = 1; i < n; i++)
        {
            if (a[i] - a[k] >= mid)
            {
                cnt++;
                k = i;
            }
        }
        if (cnt >= m)//cnt>m,说明mid小了,cnt=c,说明至少这个mid的大小符合,但说不定可以更大
            left = mid + 1;        
        else//说明mid大了
            right = mid - 1;
    }
    printf("%d\n", right);//用right不要用left,因为前面if(cnt >= m)的情况下left的增大有风险
    return 0;
}

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值