华中科技大学计算机历年考研复试上机题

题目链接:
https://www.nowcoder.com/ta/hust-kaoyan?page=1

1.矩阵转置

题目描述
输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。

#include <iostream>
#include <vector>
#include <math.h>
#include<stdlib.h>
using namespace std;

int main()
{
	int n, i, j;
	cin>>n;
	int a[n][n];
	for(i = 0; i<n; i++){
		for(j=0; j<n; j++){
			cin>>a[j][i];
		}
	}
	
	for(i = 0; i<n; i++){
		for(j=0; j<n; j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}

2.统计单词

题目描述
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词)

#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include<stdlib.h>
using namespace std;

int main()
{
	vector<int> a(100);
	string s;
	int cnt = 0;
	while(cin>>s){
// cout<<s<<" ";
		if(s.find_last_of(".")!=string::npos){
			a[cnt] = s.length()-1;
			break;
		}
		a[cnt] = s.length();
// cout<<a[cnt];
		cnt++;
	}
	
	for(int i =0; i<=cnt; i++){
		cout<<a[i]<<" ";
	}
}

3.IP地址

题目描述
输入一个ip地址串,判断是否合法。

#include<stdio.h>
int check(int a){
	if(a>=0 && a<=255) return 1;
	return 0;
}
int main(){
	int a, b, c, d;
	char ip[10100];
	while(~scanf("%s", ip)){
		sscanf(ip, "%d.%d.%d.%d", &a, &b, &c, &d);
		if(check(a) && check(b) && check(c) && check(d) && a != 0) printf("Yes!\n");
		else printf("No!\n");
	}
	
}

4.二叉排序树

题目描述
二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。

#include <stdio.h>
#include <stdlib.h>

typedef struct BinTreeNode *BinTree;
struct BinTreeNode{
    int data;
    BinTree left,right;
};

int f = -1;
BinTree Insert(BinTree T, int x, int p){
    if(!T){
        T = (BinTree)malloc(sizeof(struct BinTreeNode));
        T->data = x;
        T->left = T->right = NULL;
        f = p;
    }else{
        if(x < T->data) T->left = Insert(T->left, x, T->data);
        else T->right = Insert(T->right, x, T->data);
    }
    return T;
}
int main()
{
    int n,x;
    BinTree BT = NULL;
    while(~scanf("%d",&n)){
        for(int i = 0;i<n;i++){
            scanf("%d",&x);
            BT = Insert(BT,x,-1);
            printf("%d\n",f);
        }
    }
    return 0;
}

5.字符串连接

题目描述
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 101
int main()
{
    char str1[Maxsize], str2[Maxsize];
    while(~scanf("%s %s",str1, str2)){
            printf("%s%s\n",str1,str2);
    }
    return 0;
}

6.a+b

题目描述
实现一个加法器,使其能够输出a+b的值。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define Maxsize 1002

void reverse(char a[], int len){
    char temp;
    for(int i = 0;i<len/2;i++){
        temp = a[i];
        a[i] = a[len-1-i];
        a[len-1-i] = temp;
    }
}
int main()
{
    char t1[Maxsize], t2[Maxsize];
    int len1,len2,i;
    while(~scanf("%s %s",t1,t2)){
        int res[Maxsize];
        i = 0;
        len1 = strlen(t1);
        len2 = strlen(t2);
        reverse(t1, len1);
        reverse(t2, len2);
        while(i<len1&&i<len2){
            res[i] = t1[i]+t2[i]-'0'-'0';
            i++;
        }
        while(i<len1){
            res[i] = t1[i]-'0';
            i++;
        }
        while(i<len2){
            res[i] = t2[i]-'0';
            i++;
        }
        res[i] = 0;
        for(int j = 0;j<i;j++){
            if(res[j]>9){
                res[j] = res[j]%10;
                res[j+1]++;
            }
        }
        if(res[i]!=0) printf("%d",res[i]);
        for(int j = i-1;j>=0;j--) printf("%d",res[j]);
        printf("\n");
    }

    return 0;
}

7.排序

题目描述
对输入的n个数进行排序并输出。

    #include <iostream>
#include <set>

using namespace std;
template<class T>
void print(T first, T last){
   for(;first!=last;++first) cout<<*first<<" ";
   cout<<endl;
}

int main()
{
    int n;
    while(cin>>n){
        int t[n];
        for(int i=0;i<n;i++){
            cin>>t[i];
        }
        multiset<int> p(t,t+n);
        print(p.begin(),p.end());
    }

    return 0;
}

8.特殊排序

题目描述
输入一系列整数,将其中最大的数挑出(如果有多个,则挑出一个即可),并将剩下的数进行排序,如果无剩余的数,则输出-1。

#include <iostream>
#include <set>

using namespace std;
template<class T>
void print(T first, T last){
    last--;
    cout<<*last<<endl;
    if(first==last) cout<<"-1";
    else{
        for(;first!=last;++first) cout<<*first<<" ";
    }
   cout<<endl;
}

int main()
{
    int n;
    while(cin>>n){
        int t[n];
        for(int i=0;i<n;i++){
            cin>>t[i];
        }
        multiset<int> p(t,t+n);
        print(p.begin(),p.end());
    }

    return 0;
}

9. 二叉树遍历

题目描述
二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define Maxsize 27

typedef struct BTreeNode *BTree;
struct BTreeNode{
    char data;
    BTree left,right;
};

BTree Creat(char s1[], char s2[], int lf, int ll, int rf, int rl){
    if(lf>ll||rf>rl) return NULL;
    int i;
    for(i = rf; i<=rl; i++ ){
        if(s2[i]==s1[lf]) break;
    }
    BTree p = (BTree)malloc(sizeof(struct BTreeNode));
    p->data = s1[lf];
    p->left = Creat(s1, s2, lf+1, lf+i-rf, rf, i-1);
    p->right = Creat(s1, s2, lf+i-rf+1, ll, i+1, rl);
    return p;
}

void postTravel(BTree BT){
    if(BT){
        postTravel(BT->left);
        postTravel(BT->right);
        printf("%c",BT->data);
    }
}
int main()
{
    char s1[Maxsize], s2[Maxsize];
    BTree BT;
    int len;
    while(~scanf("%s",s1)&&~scanf("%s",s2)){
        len = strlen(s1);
        BT = Creat(s1, s2, 0, len-1, 0, len-1);
        postTravel(BT);
        printf("\n");
    }
}

10.奇偶校验

题目描述
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。

#include <stdio.h>
#include <string.h>
#define Maxsize 101

int judge[8],sum;
void toBinary(char c){
    int temp = (int)c;
    for(int i = 7;temp!=0;i--){
        judge[i] = temp%2;
        if(judge[i]==1) sum++;
        temp = temp/2;
    }
}

int main()
{
    char a[Maxsize];
    while(~scanf("%s",a)){
        for(int i = 0;i<strlen(a);i++){
            sum = 0;
            for(int j = 0;j<8;j++) judge[j] = 0;
            toBinary(a[i]);
            if(sum%2==1){
                for(int j =0;j<8;j++) printf("%d",judge[j]);
            }else{
                judge[0] = 1;
                for(int j =0;j<8;j++) printf("%d",judge[j]);
            }
            printf("\n");
        }
    }
    return 0;
}


11.最大的两个数

题目描述
输入一个四行五列的矩阵,找出每列最大的两个数。
输入描述:
接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
输出描述:
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。
输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。

#include <stdio.h>
#include <limits.h>
#define min INT_MIN

int main()
{
    int a[4][5],out[2][5];
    int max1,max2,m1,m2;
    while(~scanf("%d",&a[0][0])){

        for(int i = 0;i<4;i++){
            for(int j = 0;j<5;j++){
                    if(i==0&&j==0) continue;
                    scanf("%d",&a[i][j]);
            }
        }
        for(int j = 0;j<5;j++){
            max1 = max2 = min;
            for(int i = 0;i<4;i++){
                if(a[i][j]>max1){
                    max1 = a[i][j];
                    m1 = i;
                }
            }
            for(int i = 0;i<4;i++){
                if(a[i][j]>max2&&i!=m1){
                    max2 = a[i][j];
                    m2 = i;
                }
            }
            if(m1<m2){
                out[0][j] = max1; out[1][j] = max2;
            }else
            {
                out[0][j] = max2; out[1][j] = max1;
            }
        }
        for(int i=0;i<2;i++){
            for(int j = 0;j<5;j++){
                printf("%d ",out[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

12.成绩排序

题目描述
有N个学生的数据,将学生数据按成绩从高到低排序,如果成绩相同则按姓名字符的字典序排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序,并输出N个学生排序后的信息。

#include <stdio.h>
#include <string.h>

struct Students{
    char name[105];
    int age;
    int score;
};

int comp(const void *a,const void *b){
    struct Students *s1, *s2;
    s1 = (const struct Students *)a;
    s2 = (const struct Students *)b;
    if(s1->score > s2->score) return 1;
    else if(s1->score < s2->score) return -1;
    else{
        if(strcmp(s1->name,s2->name)>0) return 1;
        else if(strcmp(s1->name,s2->name)<0) return -1;
        else{
            if(s1->age > s2->age ) return 1;
            else return -1;
        }
    }
}
int main(){
    int n;
    struct Students stu[1001];
    while(~scanf("%d",&n)){
            for(int i = 0;i<n;i++){
                scanf("%s %d %d",stu[i].name,&stu[i].age,&stu[i].score);
            }
            qsort(stu,n,sizeof(struct Students),comp);
            for(int i = 0;i<n;i++){
                printf("%s %d %d\n",stu[i].name,stu[i].age,stu[i].score);
            }
    }
    return 0;
}

13.遍历链表

题目描述
建立一个升序链表并遍历输出。

#include <stdio.h>
int comp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}
int main()
{
    int n, a[1000];
    while(~scanf("%d",&n)){
        for(int i = 0;i<n;i++){
            scanf("%d",&a[i]);
        }
        qsort(a,n,sizeof(int),comp);
        for(int i = 0;i<n;i++)printf("%d ",a[i]);
        printf("\n");
    }
}

14.守形数

题目描述
守形数是这样一种整数,它的平方的低位部分等于它本身。 比如25的平方是625,低位部分是25,因此25是一个守形数。 编一个程序,判断N是否为守形数。

#include <stdio.h>

int IsShouxing(int n){
    int m = n*n;
    while(n!=0){
        if(n%10!=m%10){
            return 0;
        }
        n =n/10;
        m = m/10;
    }
    return 1;
}
int main(){
    int n,m;
    while(~scanf("%d",&n)){
        if(IsShouxing(n)) printf("Yes!\n");
        else printf("No!\n");
    }
    return 0;
}

15.矩阵最大值

题目描述
编写一个程序输入一个mXn的矩阵存储并输出,并且求出每行的最大值和每行的总和。 要求把每行总和放入每行最大值的位置,如果有多个最大值,取下标值最小的那一个作为最大值。 最后将结果矩阵输出

#include <stdio.h>
int square[100][100];

int main()
{
    int m,n,sum,max,c;
    while(~scanf("%d %d",&m,&n))
    {
        for(int i = 0;i<m;i++)
        {
            sum = 0;
            for(int j=0;j<n;j++){
                scanf("%d",&square[i][j]);
                sum +=square[i][j];
            }
            c = 0;
            max = square[i][0];
            for(int j=0;j<n;j++)
            {
                if(square[i][j]>max){
                    c = j;
                    max = square[i][j];
                }
            }
            square[i][c] = sum;
        }
        for(int i = 0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                printf("%d ",square[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

16.最小年龄的三个职工

题目描述
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。

#include <stdio.h>
#include <string.h>

struct Employees{
    char name[11];
    int age;
    int number;
};

int comp(const void *a,const void *b){
    struct Employees *s1, *s2;
    s1 = (const struct Employees *)a;
    s2 = (const struct Employees *)b;
    if(s1->age > s2->age) return 1;
    else if(s1->age < s2->age) return -1;
    else{
        if(s1->number > s2->number) return 1;
        else if(s1->number < s2->number) return -1;
        else{
            if(strcmp(s1->name,s2->name)>0) return 1;
            else return -1;
        }
    }
}
int main(){
    int n;
    struct Employees stu[1001];
    while(~scanf("%d",&n)){
            for(int i = 0;i<n;i++){
                scanf("%d %s %d",&stu[i].number,stu[i].name,&stu[i].age);
            }
            qsort(stu,n,sizeof(struct Employees),comp);
            if(n>=3){
                for(int i = 0;i<3;i++){
                    printf("%d %s %d\n",stu[i].number,stu[i].name,stu[i].age);
                }
            }else{
                for(int i = 0;i<n;i++){
                    printf("%d %s %d\n",stu[i].number,stu[i].name,stu[i].age);
                }
            }
    }
    return 0;
}

17.对称矩阵

题目描述
输入一个N维矩阵,判断是否对称。

#include <stdio.h>

int square[100][100];

int main()
{
    int n,flag;
    while(~scanf("%d",&n)){
        for(int i = 0; i<n; i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%d", &square[i][j]);
            }
        }
        flag = 1;
        for(int i = 0; i<n; i++)
        {
            for(int j=0;j<i;j++)
            {
                if(square[i][j]!=square[j][i])
                {
                    flag = 0;
                }
            }
        }
        if(flag ==0) printf("No!\n");
        else printf("Yes!\n");
    }
    return 0;
}

18.A+B

题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。

#include <stdio.h>
#include <string.h>
int transfer(char a[]){
    int f = 0,i = 0,sum = 0;
    if(a[0]=='-'){
        f = 1; i++;
    }
    for(;i<strlen(a);i++){
        if(a[i]==',') continue;
        sum = sum*10+a[i]-'0';
    }
    if(f) sum = -sum;
    return sum;
}
int main()
{
    char a[15],b[15];
    while(~scanf("%s %s",a,b)){
        printf("%d\n",transfer(a)+transfer(b));
    }
    return 0;
}

19.打印日期

题目描述
给出年分m和一年中的第n天,算出第n天是几月几号。

#include <stdio.h>

int isLeafYear(int y)
{
    if(y%4==0&&y%100!=0) return 1;
    else if(y%400==0) return 1;
    else return 0;
}

int main()
{
    int year,n,m,day,sum;
    int mouth[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    while(~scanf("%d %d",&year,&n)){
            sum = 0;
        if(isLeafYear(year)==0) mouth[1]=28;
        else  mouth[1]=29;
        for(m = 0;n>sum;m++)
        {
            sum = sum+mouth[m];
        }
        day = n-sum+mouth[m-1];
        printf("%04d-%02d-%02d\n",year,m,day);
    }
    return 0;
}

20.二叉排序树

题目描述
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

#include <stdio.h>
#include <stdlib.h>

typedef struct BinTreeNode *BinTree;
struct BinTreeNode{
    int data;
    BinTree left,right;
};

BinTree Insert(BinTree BT, int x)
{
    if(!BT){
        BT = (BinTree)malloc(sizeof(struct BinTreeNode));
        BT->data = x;
        BT->left = BT->right = NULL;
    }else{
        if(x<BT->data)
            BT->left = Insert(BT->left, x);
        else if(x>BT->data)
            BT->right = Insert(BT->right, x);
    }
    return BT;
}

void PreTravel(BinTree BT)
{
    if(BT){
        printf("%d ",BT->data);
        PreTravel(BT->left);
        PreTravel(BT->right);
    }

}

void MiddleTravel(BinTree BT)
{
    if(BT){
        MiddleTravel(BT->left);
        printf("%d ",BT->data);
        MiddleTravel(BT->right);
    }
}

void PostTravel(BinTree BT)
{
    if(BT){
        PostTravel(BT->left);
        PostTravel(BT->right);
        printf("%d ",BT->data);
    }
}

int main()
{
    int n,x;
    BinTree BT;
    while(~scanf("%d",&n)){
        BT = NULL;
        for(int i = 0;i<n;i++){
            scanf("%d",&x);
            BT = Insert(BT,x);
        }
        PreTravel(BT); printf("\n");
        MiddleTravel(BT);  printf("\n");
        PostTravel(BT);  printf("\n");
    }
    return 0;
}

21.大整数排序

题目描述
对N个长度最长可达到1000的数进行排序。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int comp(const void *a, const void *b)
{
    char **c1,**c2;
    c1 = (const char **)a;
    c2 = (const char **)b;
    if(strlen(*c1)>strlen(*c2)) return 1;
    else if(strlen(*c1)<strlen(*c2)) return -1;
    else{
        if(strcmp(*c1,*c2)>0) return 1;
        else return -1;
    }
}

int main()
{
    char *p[101];
    int n;
    while(~scanf("%d\n",&n)){
        for(int i = 0;i<n;i++){
            p[i] = (char *)malloc(1001*sizeof(char));
            gets(p[i]);
        }
        qsort(p,n,sizeof(char *),comp);
        for(int i = 0;i<n;i++){
            printf("%s\n",p[i]);
        }
    }
    return 0;
}

22.N阶楼梯上楼问题

题目描述
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)

#include <stdio.h>
int arr[90];

int main()
{
    int n;
    arr[1] = 1;
    arr[2] = 2;
    while(~scanf("%d",&n)){
        for(int i = 3;i<=n;i++){
            arr[i] = arr[i-1] +arr[i-2];
        }
        printf("%d\n",arr[n]);
    }
    return 0;
}

23.a+b

题目描述
计算a+b的和

#include <stdio.h>

int main()
{
    int a,b;
    while(~scanf("%d %d",&a,&b)){
        printf("%d\n",a+b);
    }
    return 0;
}

24.回文字符串

题目描述
给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的。

#include <stdio.h>
#include <string.h>
int main()
{
    char str[1001];
    while(~scanf("%s",str)){
        int flag = 1;
        for(int i = 0;i<strlen(str)/2;i++)
        {
            if(str[i]!=str[strlen(str)-1-i])
            {
                flag = 0;
                break;
            }
        }
        if(flag == 0) printf("No!\n");
        else printf("Yes!\n");
    }
    return 0;
}

25.找位置

题目描述
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

#include <stdio.h>
#include <string.h>

int main()
{
    char str[101];
    while(~scanf("%s",str)){
        int hash[128];
        for(int i = 0;i<128;i++) hash[i] = 0;
        for(int i = 0;i<strlen(str);i++){
            hash[(int)str[i]]++;
        }
        for(int i = 0;i<strlen(str);i++){
            if(hash[(int)str[i]]>1)
            {
                for(int j = 0;j<strlen(str);j++){
                    if(str[j]==str[i]){
                        printf("%c:%d",str[j],j);
                        if(--hash[(int)str[i]]!=0) printf(",");
                    }
                }
                printf("\n");
            }
        }
    }
    return 0;
}

26. 阶乘

题目描述
输入n, 求y1=1!+3!+…m!(m是小于等于n的最大奇数) y2=2!+4!+…p!(p是小于等于n的最大偶数)。

#include <stdio.h>

int main()
{
    int n;
    while(~scanf("%d",&n)){
        if(n%2==0){
            int odd[n/2],even[n/2],sum1=1,sum2=2;
            odd[0] = 1;
            even[0] = 2;
            for(int i=1;i<n/2;i++){
                odd[i] = odd[i-1]*(2*i)*(2*i+1);
                even[i] = even[i-1]*(2*i+1)*(2*i+2);
                sum1 = sum1+odd[i];
                sum2 = sum2 +even[i];
            }
            printf("%d %d\n",sum1,sum2);
        }else{
            int odd[(n+1)/2],even[n/2],sum1=1,sum2=2;
            odd[0] = 1;
            even[0] = 2;
            for(int i=1;i<n/2;i++){
                odd[i] = odd[i-1]*(2*i)*(2*i+1);
                even[i] = even[i-1]*(2*i+1)*(2*i+2);
                sum1 = sum1+odd[i];
                sum2 = sum2 +even[i];
            }
            odd[(n+1)/2-1] = odd[(n-1)/2-1]*(n-1)*n;
            sum1 = sum1 + odd[(n+1)/2-1];
            printf("%d %d\n",sum1,sum2);
        }


    }
    return 0;
}

27.八进制

题目描述
输入一个整数,将其转换成八进制数输出。

#include <stdio.h>

int main()
{
    int n;
    while(~scanf("%d",&n)){
        printf("%o\n",n);
    }
    return 0;
}

28.最长&最短文本

题目描述
输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

#include<stdio.h>
#include<string.h>

int main()
{
 int m=0,i;
 char zi[1001][1001];
 while(gets(zi[m])!=NULL) {
 m++;
 }
    int max,min;
max = strlen(zi[0]);
min=strlen(zi[0]);
 for(i=1;i<m;i++)
 {
 if(min>strlen(zi[i])) min=strlen(zi[i]);
 if(max<strlen(zi[i])) max=strlen(zi[i]);
 }
 for(i=0;i<m;i++)
 {
 if(min==strlen(zi[i])) printf("%s\n",zi[i]);
 }
 for(i=0;i<m;i++)
 {
 if(max==strlen(zi[i])) printf("%s\n",zi[i]);
 }
 return 0;
}

29.农夫,羊,菜和狼的故事

题目算法以及代码参见:
https://blog.csdn.net/sharon_1995/article/details/104086941

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:41
已编辑
淘天 算法工程师 31.0k*16.0
点赞 评论 收藏
分享
M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
有工作后先养猫:太好了,是超时空战警,我们有救了😋
点赞 评论 收藏
分享
评论
4
25
分享
牛客网
牛客企业服务