华东师范 2018年 研究生复试上机题解合集

    技术2025-01-13  19

    文章目录

    庙会热河路定西和你在一起梵高先生西班牙馅饼 庙会

    庙会

    题目大意 是谁带你来看这场庙会 行为掩饰后超越了思维 舞台上的小丑和你的左小腿 别管我,别把我和他们扯在一起 ——李志《鸵鸟》 来到这场庙会,现在需要男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

    假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

    输入格式 三个整数 m, n, k (1 ≤ \leq m,n ≤ \leq 150,1 ≤ \leq k ≤ \leq 4000),分别表示男士人数、女士人数、几轮舞曲。

    输出格式 输出各轮舞曲的配对方案。 输入样例

    2 4 6

    输出样例

    1 1 2 2 1 3 2 4 1 1 2 2

    解题思路 两个指针分别指向男和女,到达临界点更新指针的值

    #include <cstdio> #include <algorithm> using namespace std; int main() { int m,n,k,cnt=0; scanf("%d%d%d",&m,&n,&k); for(int i=1,j=1;cnt<k;i++,j++) { printf("%d %d\n",i,j); if(i==m) i=0; if(j==n) j=0; ++cnt; } return 0; }

    热河路

    热河路 题目大意 没有人在热河路谈恋爱, 总有人在天亮时伤感 如果年轻时你没来过热河路, 那你现在的生活是不是很幸福 ——李志《热河》 奔跑。跌倒。奔跑。

    热河路有一家开了好多年的理发店,不管剪什么样的发型,你只要付五块钱。现在我们来到了热河路。

    我们可以将其抽象成一个如下的序列:

    110100100010000100000……

    请你找出这个无穷序列中指定位置上的数字。 输入格式 第一行一个正整数 n (1 ≤ \leq n$\leq$1500000),表示询问次数。

    接下来的 行,每行一个正整数 a i _i i (1 ≤ \leq a i _i i ≤ \leq 10 9 {^9} 9), 表示在序列中的位置。 输出格式 输出 n 行,每行为一个 0 或 1,表示该序列第 a i _i i 位上的数字。 输入样例

    4 3 14 7 6

    输出样例

    0 0 1 0

    解题思路 数学的思维,打标代数据这个规律是正确的,至于为什么,我没想明白,数学差hhh,数学啊,要我小命,呜呜呜

    #include <iostream> #include <cmath> using namespace std; int main() { int t; cin>>t; while(t--) { int num; scanf("%d",&num); int n=sqrt((num-1)*2); if(n*(n+1)==(num-1)*2||n*(n-1)==(num-1)*2) cout<<1<<'\n'; else cout<<0<<'\n'; } return 0; }

    用STL里面的 set ,然后用 find()函数在集合中查找,如果找到就输出1,否则输出0。 find()函数的时间复杂度是O(logN),最好的情况的O(1),基于红黑树的原理。 孩子不会红黑树呜呜呜,丢了大学生的脸本蒟蒻的代码,欢迎参考学习啦~~

    #include <cstdio> #include <set> using namespace std; set<int>st; int n,a; int main() { for(int k=0,i=1; i<=1e9 ; ) { st.insert(i); ++k; i+=k; } scanf("%d",&n); while(n--) { scanf("%d",&a); if(st.find(a)!=st.end()) puts("1"); else puts("0"); } return 0; }

    定西

    定西 题目大意 这么多年你一个人一直在走 方向和天气的节奏会让你忧愁 你说你遇见了一大堆奇怪的人 他们看上去好像都比你开心 ——李志《定西》 这首歌的吉他节奏总感觉是在致敬《加州旅馆》,前奏又像葫芦娃里面在蛇精洞是的配乐 一个人走走了很多年,发现自己走到了一个很长的,年久失修的楼梯面前。年久失修的意思就是,有 k 个台阶坏了,没法走。

    楼梯一共有 n 层,你一次能上一阶、两阶或三阶台阶,请问,你从楼梯底部 ( 0 开始) 走到楼梯顶部,共有多少种走法。 输入格式 输入数据共两行,第一行包含两个自然数 n (1 ≤ \leq n ≤ \leq 100) 和 k (0 ≤ \leq k < n),第二行包含 k k k 个自然数 X i X_i Xi (1 ≤ \leq x x x ≤ \leq n n n),数字之间用一个空格隔开,表示损坏的台阶的序号(从楼梯底部到楼梯顶部,台阶序号依次为 1 到 n n n)。 输出格式 输出数据仅包含一个整数,表示所有可行走法的总数。 输入样例

    5 2 2 4

    输出样例

    2

    解题思路 初始化, d p [ 0 ] dp[0] dp[0] = 1;第二个阶梯是坏的, d p [ 1 ] dp[1] dp[1]=0,否则 d p [ 1 ] dp[1] dp[1] = d p [ 0 ] dp[0] dp[0],第三个台阶是坏的, d p [ 2 ] dp[2] dp[2]=0,否则 d p [ 2 ] dp[2] dp[2] = d p [ 0 ] dp[0] dp[0] + d p [ 1 ] dp[1] dp[1],最后确定状态转移方程 d p [ n ] dp[n] dp[n] = d p [ n − 3 ] dp[n-3] dp[n3] + d p [ n − 2 ] dp[n-2] dp[n2] + d p [ n − 1 ] dp[n-1] dp[n1];

    #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int N=100+5; int f[N]={0},g[N]={0}; int main() { int n,m; cin>>n>>m; for(int i=1;i<=m;++i) { int x; cin>>x; g[x]=1; } f[0]=1; if(g[1]==1)f[1]=0; else f[1]=f[0]; if(g[2]==1)f[2]=0; else f[2]=f[0]+f[1]; for(int i=3;i<=n;++i) { if(g[i]==1)continue; f[i]=f[i-1]+f[i-2]+f[i-3]; } cout<<f[n]<<endl; return 0; }

    和你在一起

    和你在一起 题目大意 我想和你在一起 直到我不爱你 宝贝 人和人 一场游戏 我愿意为你死去 如果我还爱你 宝贝 反正活着 也没意义 宝贝 我也只能 这样为你 ——李志《和你在一起》 现场4分10秒,小哥跟着逼哥嘶吼,泪流满面。我要和你在一起,直到我不爱你。有这么 n 个数字,联成一排拼到一起便是我爱你的时间,那么我们会在一起多久呢

    例如: n = 3 时,3 个整数 13,312,343 联接成的最长时间为: 34331213。 又如: n = 4 时,4 个整数 7,13,4,246 联接成的最长时间为: 7424613。 输入格式 n (1 ≤ \leq n ≤ \leq 20),表示 n 个数。

    接下来一行 n n n 个正整数,大小不超过 1e 4 {^4} 4输出格式 拼成的最长时间。 输入样例

    3 623 583 413

    输出样例

    623583413

    解题思路 一看数据,直接字符串来个冒泡排序,数据小可以暴力做,比较第一个字符串的第一个字符,相等就比较下一位,否则得出排序结果。

    #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; string s[30]; int main() { int n; cin>>n; for(int i=1;i<=n;++i) cin>>s[i]; for(int i=2; i<=n ;++i){ for(int j=1;j<i;j++){ for(int k=0;k<=4;){ if(s[j][k]<s[i][k]){ string ss=""; ss=s[i]; s[i]=s[j]; s[j]=ss; } if(s[j][k]==s[i][k]) ++k; else break; } } } for(int i=1;i<=n;++i) cout<<s[i]; return 0; }

    梵高先生

    梵高先生 题目大意 谁的父亲死了 请你告诉我如何悲伤 谁的爱人走了 请你告诉我如何遗忘 ——李志《梵高先生》 2009年的最后一天 在义乌隔壁酒吧 李志为了还做唱片欠下来的20W 巡回35场演出 在这晚完成 喝醉了的逼哥哽咽着唱完梵高先生 说最后一次唱这歌。他粗鲁的打断了大家的合唱,然后用最沙哑的嗓音唱了起来,哪天,唯一和他合音的只有一只狗。

    抬头再看了一眼星空和黑夜,今晚的星星变成了一个三角形的样子,像这样:

    1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 … 现在给你一个正整数 n,请你给出星空的前 n 行。

    输入格式 输入文件共一行,包含一个正整数 n (1 ≤ \leq n ≤ \leq 20)。 输出格式 输出文件共 n 行,即星空的前 n 行。每行包含若干正整数,这些正整数之间用一个空格隔开(不能有多余的空格),最后一个正整数后面没有空格。 输入样例

    4

    输出样例

    1 1 1 1 2 1 1 3 3 1

    解题思路 水题, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + d p [ i − 1 ] [ j ] dp[i][j] = dp[i-1][j-1] + dp[i-1][j] dp[i][j]=dp[i1][j1]+dp[i1][j]

    #include <iostream> using namespace std; int dp[50][50]; int main() { int n; cin>>n; dp[1][1]=1; for(int i=2;i<=n;++i) { for(int j=1;j<=n;++j) { if(j==1 || j==n) dp[i][j]=1; else dp[i][j]=dp[i-1][j]+dp[i-1][j-1]; } } for(int i=1;i<=n;++i){ for(int j=1;j<=i;j++) { if(j==1) cout<<dp[i][j]; else cout<<" "<<dp[i][j]; } cout<<endl; } return 0; }

    西班牙馅饼

    西班牙馅饼 题目大意 港岛妹妹,你献给我的西班牙馅饼 甜蜜地融化了我,天空之城在哭泣 港岛妹妹,我们曾拥有的甜蜜的爱情 疯狂地撕裂了我,天空之城在哭泣

    ——李志《天空之城》

    粉丝问:“我想问一下在你歌词里面的馅饼是什么?”

    李志答:“告诉你,西班牙馅饼是怎么一回事。是有一次我一个朋友给我寄了一张明信片,从西班牙寄过来的,明信片的封面是一块馅饼,谢谢你,你惊讶吗?你们惊讶吗?想想啥?你们知道个几把?整天瞎几把猜对不对?挺可笑的。所以答案一公布就这个样子。你再回想一下生活里面有多少个这样的事情,你充满了幻想,充满了好奇,猜哦,瞎几把猜,猜到后面傻逼了吧?没猜到了吧?”

    现在我们看见了这个西班牙馅饼长什么样,西班牙馅饼是个矩形形状,想不到吧。我们可以把它抽象成一个 N 行 M 列的正整数矩阵。每个格子有一个“美味值”,由于一些不可告人的原因我们对于这个馅饼没行只能吃一口,港岛妹妹说如果她吃到美味值为 k 的馅饼,就会给我做出美味值为 k 的红烧肉。问红烧肉最多能有多好吃。 输入格式 N,M:表示 N 行 M 列,馅饼的尺寸大小。

    以下 N 行 M 列为馅饼每个格子的美味值。

    输入中所有数是不超过 100 的正整数。

    输出格式 一个正整数,表示红烧肉最多能有多好吃。

    输入样例

    3 2 8 15 11 4 2 43

    输出样例

    69 #include <iostream> using namespace std; int main() { int n,m,ans=0; cin>>n>>m; for(int i=0;i<n;++i) { int maxx=-0x3f3f3f3f,t; for(int j=0;j<m;++j) { cin>>t; if(t>maxx) maxx=t; } ans+=maxx; } cout<<ans<<endl; return 0; }
    Processed: 0.009, SQL: 12