C++上机练习
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;
}