马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 sfqxx 于 2023-2-25 19:05 编辑
上一关:https://fishc.com.cn/thread-224646-1-1.html
你们在欢快的聊天,突然,
砰!
你们的小船受到了撞击,现在需要修复
谁知那个不要脸的 肇事人说:如果你们能答对我给的题目,我就免费给你们修船
一、有以下代码,请观察之后回答,切勿上机!本题同时也考察你们的诚信(40分)
(1)#include <iostream>
using namespace std;
const int SIZE = 20;
int data[SIZE];
int n, i, h, ans;
void merge()
{
data[h-1] = data[h-1] + data[h];
h--;
ans++;
}
int main()
{
cin>>n;
h = 1;
data[h] = 1;
ans = 0;
for (i = 2; i <= n; i++)
{
h++;
data[h] = 1;
while (h > 1 && data[h] == data[h-1])
merge();
}
cout<<ans<<endl;
}
输入:8
输出:_________(10分)
输入:2012
输出:_________(10分)
(2)#include <iostream>
#include <string>
using namespace std;
int lefts[20], rights[20], father[20];
string s1, s2, s3;
int n, ans;
void calc(int x, int dep)
{
ans = ans + dep*(s1[x] - 'A' + 1);
if (lefts[x] >= 0) calc(lefts[x], dep+1);
if (rights[x] >= 0) calc(rights[x], dep+1);
}
void check(int x)
{
if (lefts[x] >= 0) check(lefts[x]);
s3 = s3 + s1[x];
if (rights[x] >= 0) check(rights[x]);
}
void dfs(int x, int th)
{
if (th == n)
{
s3 = "";
check(0);
if (s3 == s2)
{
ans = 0;
calc(0, 1);
cout<<ans<<endl;
}
return;
}
if (lefts[x] == -1 && rights[x] == -1)
{
lefts[x] = th;
father[th] = x;
dfs(th, th+1);
father[th] = -1;
lefts[x] = -1;
}
if (rights[x] == -1)
{
rights[x] = th;
father[th] = x;
dfs(th, th+1);
father[th] = -1;
rights[x] = -1;
}
if (father[x] >= 0)
dfs(father[x], th);
}
int main()
{
cin>>s1;
cin>>s2;
n = s1.size();
memset(lefts, -1, sizeof(lefts));
memset(rights, -1, sizeof(rights));
memset(father, -1, sizeof(father));
dfs(0, 1);
}
输入:
ABCDEF
BCAEDF
输出:__________(20分)
二、完形填空题(60分)
1.(排列数)输入两个正整数 n, m (1≤n≤20,1≤m≤n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如:
输入:3 2
输出:1 2 1 3 2 1 2 3 3 1 3 2#include <iostream>
#include <cstring>
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i, j, k;
bool flag;
int main()
{
cin >> n >> m;
memset( used, false, sizeof(used) );
for ( i = 1; i <= m; i++ )
{
data[i] = i;
used[i] = true;
}
flag = true;
while ( flag )
{
for ( i = 1; i <= m - 1; i++ )
cout << data[i] << " ";
cout << data[m] << endl;
flag = ①;
for ( i = m; i >= 1; i-- )
{
②;
for ( j = data[i] + 1; j <= n; j++ )
if ( !used[j] )
{
used[j] = true;
data[i] = ③;
flag = true;
break;
}
if ( flag )
{
for ( k = i + 1; k <= m; k++ )
for ( j = 1; j <= ④; j++ )
if ( !used[j] )
{
data[k] = j;
used[j] = true;
break;
}
⑤;
}
}
}
}
1.(12分)
2.(12分)
3.(12分)
4.(12分)
5.(12分)
为保证诚信,将设置回帖仅作者可见
版本日志:
v1.0:初始版本
v1.1:@ExiaGN001 指出看不到我的回复,改成撤销置顶(奖励1荣誉)
v1.2:增加题目条件,以及修改了代码(奖励1荣誉,1贡献)
置顶楼层为作者答案,不用管
loading……
本帖最后由 ExiaGN001 于 2023-2-25 21:01 编辑
捉虫:
第三题:memset声明于cstring,会报错
第四题:没有程序意图就完型,不好
另:作者可见看不到你回了啥
1.7
2.2004
3.55
4.1. 0 或者 false
4.2.
4.3. j
|