这里写目录标题
第一部分 C语言和Python
1.请写出下面程序的输出结果。
#include <stdio.h>
int main(void) {
printf("%d\n", printf("Hello World!\n"));
return 0;
}
结果
Hello World! 13
考察
1.printf的是输出的长度!-》
补充
1.scanf的返回值是正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
-》
2.请写出下面程序的输出结果。
#include <stdio.h>
int main(void) {
int nums[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
printf("%d\n", nums[1][-2]);
printf("%d\n", nums[-1][5]);
printf("%d\n", -nums[1][5]);
return 0;
}
结果
2 3 -9
考察
数组 + 指针
a[i]可表示二维数组中一维数组的首元素
a[i][j]可表示指定首元素向后移动j个位置
3.
CSV的中文全称为______________。CSV文件______(填写“是”或“不是”)纯
文本文件。
结果
逗号分隔符(字符分隔符)
注:英文全称为Comma-Separated Values。
是
考察
csv基本概念
4.
csv.reader()中参数delimiter的作用是____________________________。
结果
分隔符,默认为英文逗号。
5.
使用pd.read_csv()读取CSV文件,返回值类型为______________。
结果
数据框(或 DataFrame)
6.
构建一个学生类,包含学生的姓名,年龄,三科的成绩(高数,线代,离散),总
分,该类同时含有输出学生按某科成绩的排序的方法。
下面给出一组示例,斜体字为从键盘输入的内容:
请输入学生数量:3
请输入姓名:Tom
请输入年龄:18
请输入高数成绩:95
请输入线代成绩:93
请输入离散成绩:94
请输入姓名:Jerry
请输入年龄:18
请输入高数成绩:93
请输入线代成绩:96
请输入离散成绩:89
请输入姓名:Spike
请输入年龄:19
请输入高数成绩:92
请输入线代成绩:99
请输入离散成绩:85
请输入需要比较的成绩:线代
线代 成绩排名为:
第1名:Spike
第2名:Jerry
第3名:Tom
请在矩形框中和横线上完善代码,使其能够实现上面的功能。
class Student():
def __init__(________, n): # n为学生数量
________.stu = {}
for i in range(n):
name = str(input('请输入姓名:'))
age = int(input('请输入年龄:'))
score1 = int(input('请输入高数成绩:'))
score2 = int(input('请输入线代成绩:'))
score3 = int(input('请输入离散成绩:'))
|———————————————————————————————————————————|
| |
| |
| |
| |
|———————————————————————————————————————————|
def sortScore(________, val):
print(val, '成绩排名为:')
for i in range(n):
print(________________________________________________)
n = int(input('请输入学生数量:'))
a = Student(n)
sort_key = str(input('请输入需要比较的成绩:'))
a._________________________________________________________________
结果
class Student():
def __init__(self, n): # n为学生数量
self.stu = {}
for i in range(n):
name = str(input('请输入姓名:'))
age = int(input('请输入年龄:'))
score1 = int(input('请输入高数成绩:'))
score2 = int(input('请输入线代成绩:'))
score3 = int(input('请输入离散成绩:'))
self.stu[name] = []
self.stu[name].append(age)
self.stu[name].append({
'高数': score1,
'线代': score2,
'离散': score3
})
self.stu[name][1]['总分'] = sum(self.stu[name][1].values())
def sortScore(self, val):
a = sorted(self.stu.items(),key=lambda item[1][1][val],reverse=true)
print(val, '成绩排名为:')
for i in range(n):
print('第{0:d}名:{1:s}'.format(i+1,a[i][0]))
n = int(input('请输入学生数量:'))
a = Student(n)
sort_key = str(input('请输入需要比较的成绩:'))
a.sortScore(sort_key)
考察
类-》
第二部分 数据结构与算法
1.
在循环队列中,当队列为空时,有frontrear;而当所有队列空间全占满时,
也有frontrear。为了区别这两种情况,规定循环队列最多只能有
MAXSIZE-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经
满了。因此,队列判空的条件是__________________,队列判满的条件是
。请简述循环队列的优点:__________
____________________________________________________________________。
结果
front==rear
front=(rear+1)% MAXSIZE
有效解决了以顺序表形式存储的队列的“假溢出”问题。
考察
% 保证即使rear已经在第2,3圈,与front的比较依然在同一圈
2.
对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复
杂度为______,在给定值为x的结点后插入一个新结点的时间复杂度为______。
O(1) O(n)
考察
简单知识
3.
2010·考研真题 若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,
但不允许连续三次进行退栈操作,则不可能得到的出栈序列是______。
A.d,c,e,b,f,a B.c,b,d,a,e,f C.b,c,a,e,f,d D.a,f,e,d,c,b
D
解析
若(a)表示出,[a]表示进
A.[a] [b] [c] [d] (c) [e] (b) [f] (f) (a)
4.
请判断一个单链表是否为回文链表。若链表为回文链表,函数返回true,否则,
返回false。链表的长度不超过50000。
语言:C
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode* next;
* };
*/
bool isPalindrome(struct ListNode* head) {
}
解析
解法 1:数组+双指针
bool isPalindrome(struct ListNode* head)
{
int n[50000];
int len=0;
while(head)
{
n[len++]=haed.val;
head=head->next;
}
for(int i=0,j=len-1;i<j;i++,j--)//头尾比较
{
if(n[i]!=n[j])
{
return false;
}
}
return true;
}
5.
给定pushed和popped两个序列,每个序列中的值都不重复,只有当它们可
能是在最初空栈上进行的推入push和弹出pop操作序列的结果时,返回true;
否则,返回false。
提示:
(1)0 <= pushed.length == popped.length <= 1000
(2)0 <= pushed[i], popped[i] < 1000
(3)pushed是popped的排列。
语言:C
bool validateStackSequences(int* pushed, int pushedSize,
int* popped, int poppedSize) {
}
解析
bool validateStackSequences(int* pushed,int pushedSize,int* popped,int poppedSize)
{
int* stack=(int*)malloc((int) * pushedSize);//定义一个数组
int stackSize=0;
for(int i=0,j=0;i<pushedSize;i++)
{
stack[stackSize++]=pushed[i];
while(stackSize && stack[stackSize-1]==popped[j])//不等于就跳过
{
j++;
stackSize--;
}
}
return stackSize==0;
}
考点
栈的特点
思路是先进后出控制好i,j就ok
6.
实现一种算法,删除单向链表中间的node结点(即不是第一个或最后一个结
点),假定你只能访问该结点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
语言:C
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode* next;
* };
*/
void deleteNode(struct ListNode* node) {
}
解析
void deleteNode(struct ListNode* node)
{
struct ListNode* p=node, *q=node->next;//*是指针运算符,*q为指针变量q所指向的存储单元中的内容。而指针变量q中一般只存放地址。
p.val=q.val;
p->next=q->next;
free(q);
}
注意
给定的是节点
7.XUPT_ACM新生寒假训练·第一周训练题
有N对双胞胎,他们的年龄分别是1,
2,3,……,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了
安全起见,要求年龄大的和年龄小的排在一起,好让年龄大的保护年龄小的,然
后从头到尾,每个人报告自己的年龄,就得到了一个年龄的序列。比如有4对双
胞胎,他们报出来的年龄序列是:41312432。突然,他们中间最聪明的小明发现
了一个有趣的现象,原来,这个年龄序列有一个规律,两个1中间有1个数,两
个2中间有2个数,两个3中间有3个数,两个4中间有4个数。但是,如果是
2对双胞胎,那么无论他们怎么排年龄序列,都不能满足这个规律。
你的任务是,对于给定的N对双胞胎,是否有一个年龄序列,满足这一规律,如
果是,就输出Y,如果没有,输出N。
输入:共有若干行,每行一个正整数N<100000,表示双胞胎的数量;如果N=0,
表示结束。
输出:共有若干行,每行一个正整数,表示对应输入行是否有一个年龄序列,满
足这一规律,如果是,就输出Y,如果没有,输出N。
输入样例: 输出样例:
4 Y
2 N
1309 N
0
语言限制:C/C++/Python 3/Java
语言:__________
代码:
解析
#include<stdio.h>
int main(void)
{
int n;
while(scanf("%d",&n)==0)
{
if(n%4==0||n%4==3)
printf("Y");
else
printf("N");
}
return 0;
}
解析