东北大学计算机专业研究生入学考试2005年真题
发布时间
阅读量:
阅读量
/*-------------------------------------------------------C语言部分------------------------------------------------------------------*/
/*1.将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。计算不超过1993的最大的二进制的对称数。*/
#include <stdio.h>
int count(int n)
{
int a[4],i = 0,flag; //flag为是否是对称数的标记,若为对称数为1,否则为0
while(n != 0) //获取n的四位数字分别放到a数组中
{
a[i] = n % 10; //获取n的末位数字
n = n / 10;
i++;
}
if(i == 2) //n为两位数的情况
{
if(a[0] == a[1])
flag = 1;
else
flag = 0;
}
else if(i == 3) //n为三位数的情况
{
if(a[0] == a[2])
flag = 1;
else
flag = 0;
}
else //n为四位数的情况
{
if(a[0] == a[3] && a[1] == a[2])
flag = 1;
else
flag = 0;
}
return flag;
}
void main()
{
int i,max = 0,flag;
for(i = 0;i < 1993;i++)
{
flag = count(i);
if(flag == 1 && i >= max) //是对称数
max = i;
}
printf("%d",max);
}
/*2.编写一函数不清delstring(char *pstr1,char*pstr2)功能是删除在字符串pstr1中出现的所有字符串pstr2.(不允许有字符串标准库函数)*/
void delstring(char *pstr1, char *pstr2)
{
int m = 0, n = 0, i = 0, j, v;
while(pstr1[m]!= 0) m++; //m中统计pstr1的长度
while(pstr2[n]!= 0) n++; //n中统计pstr2的长度
while ((m+1-i) > n)//pstr1剩余字符数要大于pstr2字符数
{
j = 0;
while (pstr1[i+j] == pstr2[j] && j<n)
{
j++;
}
if (pstr2[j] == 0)
{
for(v = i+n; v <= m; v++) //移动字符清除相同字符
pstr1[v-n] = pstr1[v];
}
else //不同,继续.
i++;
}
}
/*3.共有N种面值的邮票,存在整数R,使得用不超过M枚的上述面值的邮票可以贴出从1开始一直到R的有面值,但不能R+1。
例如:面值(1,4,7,8)的邮票不超过3张可以贴出1~24间的所有邮资,但贴不出25。)
请从键盘输入M和N,寻找一种确定每种邮票面值的方案,使得该方案在M和N的限制下对应的R值最大。*/
#define MAX_N_SIZE 10
int r,a[MAX_N_SIZE];/*-----r为最大面值,a[0..n-1]存放各种面值-----*/
int fun(int m,int n)
{
int i,flag = 0,m1;
m1 = m;
if(m1 > n)
printf("error");
if(m1 == n)
m1--;
for(i = 0;i < m1;i++)
a[i]=1+i*m1;
for(i = m1;i < n;i++)
a[i]=a[i-1]+1;
r = a[n-1]*m;
}
/*--------------------------------------------------------数据结构部分---------------------------------------------------------------*/
/*二.写出从哈希表中删除关键字为K的一个记录的算法,设哈希函数为H,解决冲突的方法为链地址法。*/
//!!!!!!!!!!!!!!!!!!!此题与2004年数据结构部分第三大题的一部分
/*三.设二叉树中结点的数据域的值互不相同,试设计一个算法将数据域值为X的结点的所有祖先结点的数据域打印出来。*/
struct Record //结点
{
Record *left;
Record *right;
Record *parent;
type data;
};
void PrintParent(type x)
{
while(p != NULL && p->data != x) //查找值为X的节点;
p = p->next;
if(p->data == x)
{
for(p = parent; p != null; p = parent->parent)
printf("%d",data);
}
}
/*四.写算法判别以邻接表方式存储的有向图中是否存在由顶点Vi到Vj的路径。(i不等于j)*/
//邻接表结构
struct arcnode
{
int post;
arcnode *next;
};
struct headnode
{
type data;
arcnode *first;
};
struct graph
{
headnode node[n];
int nodenum,arcnum;
}g;
bool visited[n]; //访问标志
bool path(graph g, int vi, int vj)
{
arcnode w = g.node[vi].first;
visited[vi] = true;
if(g.node[vi].data == g.node[vj].data)
return true;
for(; w; w = w->next) //深度遍历
if(!visited[w->post])
return path(g, w->post, vj);
return false;
}
全部评论 (0)
还没有任何评论哟~
