C++上机练习

wwwen 273 2022-02-11

KY266 反序数

描述:
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值

输入描述:

程序无任何输入数据。

输出描述:

输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。
#include<iostream>
using namespace std;

void GetN() //暴力算法
{
    int a,b,c,d;
    for(a=0;a<10;++a)
    {
        for(b=0;b<10;++b)
        {
            for(c=0;c<10;++c)
            {
                for(d=0;d<10;++d)
                {
                    if (9*(a*1000+b*100+c*10+d)==d*1000+c*100+b*10+a &&a*1000+b*100+c*10+d!=0)
                    {
                        cout << a*1000+b*100+c*10+d <<endl;
                    }
                    
                }
            }
        }
    }
    
    return;
}
*/
int Reverse(int x)//反序数函数
{
    int revx = 0;
    while (x!=0)
    {
        revx *= 10;
        revx += x%10;
        x/=10;
    }
    return revx;
}
void GetN_2()//枚举函数
{
    for (int i = 1000; i <10000 ; i++)
    {
        if (i*9==Reverse(i))
        {
            cout << i <<endl;
        }
    }
    return ;
}



int main(int argc, char const *argv[])
{
    GetN_2();
    return 0;
}


KY11 二叉树遍历

描述:
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。
示例:

输入:
abc##de#g##f###

输出:
c b e g d f a 
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
typedef struct Node
{
        char node;
        struct Node* lchild;
        struct Node* rchild;
        Node(char c): node(c),lchild(nullptr),rchild(nullptr){}
}Node,*pNODE;

pNODE Create_Tree(int& position,string str)
{
        char c =str[position++];
        if (c == '#')
        {
                return nullptr;
        }
        pNODE root = new Node(c);
        root->lchild = Create_Tree(position,str);
        root->rchild = Create_Tree(position,str);
        return root;
}

void InOrder(pNODE root)
{
        if (root==nullptr)
        {
                return;
        }
        InOrder(root->lchild);
        cout << root->node << " " ;
        InOrder(root->rchild);
        return;
}
int main(int argc, char const *argv[])
{
        string a;
        while (cin >> a)
        {
                int position = 0;
                pNODE root = Create_Tree(position,a);
                InOrder(root);
                printf("\n");
        }
               
        return 0;
}


KY9 成绩排序

描述
用一维数组存储学号和成绩,然后,按成绩排序输出。

输入描述:
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出描述:
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。

示例1:

输入:
3
1 90
2 87
3 92

输出:
2 87
1 90
3 92
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXSIZE = 100;
struct student
{
	int Number;
	int Score;
};

bool Compare(student x, student y)
{
	if (x.Score==y.Score)
	{
		return x.Number < y.Number;
	}
	else
	{
		return x.Score < y.Score;
	}
}

int main(void)
{
	student array[MAXSIZE];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> array[i].Number >> array[i].Score;
	}
	sort(array, array + n, Compare);
	for (int i = 0; i < n; i++)
	{
		cout << array[i].Number << " " << array[i].Score<<endl;
	}
	return 0;
}