12月29日,顺序栈 进制转换

本文介绍了一个简单的C语言程序,该程序将一个十进制整数转换为等效的八进制数。通过使用栈来逆序存储每次除以8后的余数,最终输出八进制数。

#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Stack
{
    datatype data[8];
    int top;
}*Node,Stack;


int main(int argc, const char *argv[])
{
    int num,result;
    printf("请输入一个数");
    scanf("%d",&num);
    Node p=(Node)malloc(sizeof(Stack));
    if(p==NULL)
    {
        printf("创立栈失败!");
    }
        p->top=-1;
        printf("创建成功!");
    while(num!=0)
    {
        result=num%8;
        p->top++;
        p->data[p->top]=result;
        num=num/8;
    }
    //遍历
    printf("八进制数是");
    for(int i=p->top;i>=0;i--)
    {
        printf("%d\t",p->data[i]);
    }
    while(p->top!=-1)
    {
       p->top--;
    }
    free(p);
    p=NULL;
    printf("销毁成功");


    return 0;
}
 

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项) CSP-J/S第二轮考试测评机所用的 Linux系统属于( )。 UML IDE OS Database 第2题 单选题 (2分) C++ 中被 static 修饰的变量会存储在( )中。 堆 栈 静态存储区 寄存器 第3题 单选题 (2分) 下列IP中( )属于B类IP。 8.8.8.8 63.31.255.255 173.30.250.1 193.168.110.120 第4题 单选题 (2分) 8 位有符号整型 -97 的补码表示是( )。 00011110 10011111 10011110 11100001 第5题 单选题 (2分) 下列代码中( )无法实现 swap(a, b) ,即两个正整数a、b的交换。 a ^= b ^= a ^= b a -= b -= a += b a /= b = (a *= b) / b t = a, a = b, b = t 第6题 单选题 (2分) 最大长度为30的循环队列中,头指针指向无效元素,尾指针指向有效元素,则当 head = 23 且 tail = 15 时,队列中的元素数为( )。 8 9 22 23 第7题 单选题 (2分) 5 个人排成一排,甲乙相邻,丙丁不相邻的方案数为( )。 24 48 12 60 第8题 单选题 (2分) 10 个人去买价值5元的商品,其中 5 人拿着 5 元,剩下 5 人拿着 10 元,小卖部开始没有钱可以找,有( )种排队方式能使得每个人都找的开。 14 42 24 28 第9题 单选题 (2分) 一棵二叉树的前序遍历结果为 CDBGHAFIE ,中序遍历结果为 BDGHCFAIE ,该二叉树的后序遍历结果是( )。 BHGDFEIAC CAIEFDGHB EIFAHGBDC BGHDFAIEC 第10题 单选题 (2分) 已知2024年8月29是星期四,则1842年8月29是( )。 星期一 星期三 星期五 星期 第11题 单选题 (2分) 某单位安装一条电信宽带进行上网,运营商说下行速度是 1000 Mbps。要下载大小为 20 GB 的软件,最快大约需要( )秒。 2 20 200 2000 第12题 单选题 (2分) 如果字符串s在字符串A中出现了,则字符串s被称作字符串A的子串。设字符串 A = “players”,A的非空子串的数目是( )。 21 22 28 29 第13题 单选题 (2分) 在数组 A[x]中,若存在( i < j )且( A[i] > A[j] ),则称( A[i] , A[j] )为数组 A[x]的一个逆序对。对于序列(7,4,1,9,3,6,8,5),在不改变顺序的情况下,去掉( )会使逆序对的个数减少4。 1 3 6 5 第14题 单选题 (2分) 对数列 {50,40,95,20,15,70,60,45} 以初始增量值 4 进行希尔排序,则第二轮结束后数列的前 4 位为( )。 {15,20,50,40} {15,40,60,20} {15,20,40,45} {15,20,40,50} 第15题 单选题 (2分) 有8个结点的非连通简单无向图最多有( )条边。 8 7 21 49 第16题 判断题 (1.5分) 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填 ×;除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分) (一) #include<cstdio> using namespace std; const int N = 1e3; int n; int used[N]; int dfs(int k) { if (k > n) return 1; int res = 0; for (int i = 1; i <= n; ++i) { if (used[i] && i * i >= i) continue; used[i] = 1; res += dfs(k + 1); used[i] = 0; } return res; } int main() { scanf("%d", &n); printf("%d\n", dfs(1)); return 0; } 判断题: 当程序输入为 12 时,程序的运行时间可能会超过 1s 。( ) 正确 错误 第17题 判断题 (1.5分) 【接上一题】当且仅当输入的 n 满足 n≥3 时,程序的输出结果会大于 n 。( ) 正确 错误 第18题 判断题 (1.5分) 【接上一题】将程序第10行中"&& i * i >= i"的内容去掉,程序运行结果可能发生改变。( ) 正确 错误 第19题 判断题 (1.5分) 【接上一题】删去程序第 2 行"using namespace std;",程序能成功通过编译。( ) 正确 错误 第20题 单选题 (3分) 选择题: 【接上一题】当程序输入为 8 时,程序输出为( )。 15014 1854 133496 40320 第21题 单选题 (3分) 【接上一题】当程序输入为 11 时,程序输出为( )。 176214841 1335972 39916800 1334961 第22题 判断题 (1.5分) (二) #include<iostream> using namespace std; const int N = 5e3; int n, m; int dp[N][N]; int main() { cin >> n >> m; dp[0][0] = 1; for (int i = 1; i <= m; ++i) { for (int j = 0; j <= n; ++j) { dp[i][j] = dp[i - 1][j]; if (j >= i) { dp[i][j] += dp[i][j - i]; } } } cout << dp[m][n] << endl; return 0; } 判断题: 程序套用了0/1背包模型。( ) 正确 错误 第23题 判断题 (1.5分) 【接上一题】当程序输入为 5000 1000 时,程序有 Runtime error 的风险。( ) 正确 错误 第24题 判断题 (1.5分) 【接上一题】当程序第 4 行改为 const int N = 5e6+5; 后,当输入为 1000000 500000 时,程序能在 1s 内正常结束。( ) 正确 错误 第25题 判断题 (1.5分) 【接上一题】当程序输入为 0 10 时,程序输出为 0 。( ) 正确 错误 第26题 单选题 (3分) 选择题: 【接上一题】当程序输入为 3 0 时,程序输出为( )。 3 1 0 程序无输出 第27题 单选题 (3分) 【接上一题】当程序输入为 10 5 时,程序输出为( )。 42 30 18 0 第28题 判断题 (1.5分) (三) #include <iostream> using namespace std; int c[100], n, s, cnt, ans; void calln(int x) { while (x) { n++; x >>= 1; } } int bitcount(int x) { int cnt = 0; while (x) { cnt += x & 1; x >>= 1; } return cnt; } int main() { cin >> s; calln(s); for (int i = s; i; i = s & (i-1)) { cnt++; c[bitcount(i)] += i; } for (int i = 1; i <= n; i++) ans = max(ans, c[i]); cout << cnt << endl; cout << ans << endl; return 0; } 假设输入的 s 为正整数且不超过 10 9 ,完成下面的判断题和单选题: 判断题: 输出的第一行不会超过输入的 s 。( ) 正确 错误 第29题 判断题 (1.5分) 【接上一题】bitcount(x)函数用于计算 x 对应的二进制整数的位数。( ) 正确 错误 第30题 判断题 (1.5分) 【接上一题】输入的 s 不应大于 100,否则会发生数组越界。( ) 正确 错误 第31题 判断题 (1.5分) 【接上一题】当程序输入为 3 时,程序的输出的第一行和第二行都是 3 。( ) 正确 错误 第32题 单选题 (3分) 选择题: 【接上一题】当程序输入的s为 23 时,程序输出的第一行为( )。 3 7 15 31 第33题 单选题 (3分) 【接上一题】当程序输入的s为 11 时,程序输出的第二行为( )。 11 16 19 22 第34题 单选题 (4分) 【接上一题】当程序输入的s为 127 时,程序输出的第二行为( )【本题4分】。 1980 2540 2870 3200 第35题 单选题 (3分) 三、完善程序(单选题,每小题3分,共计30分) (一) 冒泡排序 题目描述 Mike 有一个数列,他想对这个数列进行排序,但是他只会冒泡排序,于是他想知道,他至少需要交换相邻的数几次,才能将整个数列排成升序呢。 输入格式 第一行一个整数 n ,表示数列的长度。 第二行 n 个整数 a 1 ​ ,a 2 ​ ,⋯,a n ​ ,表示数列。 输出格式 一行,包含一个整数,表示最少交换次数。 提示 冒泡排序交换次数即数列逆序对数,此处用归并排序统计逆序对。 数据规模:1≤n≤10 6 ,−10 9 ≤a i ​ ≤10 9 。 程序 #include<cstdio> #include<cstring> typedef long long LL; const int N = 1000010; int n; LL ans; int a[N], t[N]; void sort(int l, int r) { if (l + 1 == r) return; int mid = l + r >> 1; ___①___; for (___②___; k < r; ++k) if (j >= r || (i < mid && a[i] <= a[j])) t[k] = a[i++]; else t[k] = a[j++], ___③___; ___④___; } int main() { scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", a + i); } ___⑤___; printf("%lld\n", ans); return 0; } ①处应填( )。 sort(l, mid), sort(mid + 1, r) sort(l, mid), sort(mid, r) sort(l, mid - 1), sort(mid, r) sort(l, mid - 1), sort(mid + 1, r) 第36题 单选题 (3分) 【接上一题】②处应填( )。 int k = l, i = l, j = mid +1 int k = l, i = mid + 1, j = l int k = l, i = mid + 1, j = r int k = l, i = l, j = mid 第37题 单选题 (3分) 【接上一题】③处应填( )。 ++ans ans += mid - i + 1 ans += mid - i - 1 ans += mid - i 第38题 单选题 (3分) 【接上一题】④处应填( )。 memcpy(a + l, t + l, sizeof(int) * (r - l)) memcpy(a, t, sizeof(a)) memset(t, 0, sizeof(t)) memcpy(a + l, t + l, sizeof(int) * (r - l + 1)) 第39题 单选题 (3分) 【接上一题】⑤处应填( )。 sort(1, n) sort(1, n + 1) sort(0, n) sort(0, n + 1) 第40题 单选题 (3分) (二) 拥挤的城市 题目描述 Tom 所在的城市由 n 个地点组成,并由 n−1 条公路连接,这些公路的分布保证地点之间两两有且仅有一条路径。 Tom 所在的城市十分拥挤,这使 Tom 每次去某地都非常困扰,他为每条公路定义了一个拥挤值,他定义两个地点之间的拥挤程度为两地路径上每条公路的拥挤值的最大值。 现在 Tom 想知道,根据他的定义,任意两两城市间拥挤程度的和是多少呢? 输入格式 第一行一个整数 n ,表示城市中的地点个数。 接下来 n 行每行三个整数 x ,y ,v 表示在地点 x 和 y 之间有一条拥挤值为 v 的公路。 输出格式 一行,包含一个整数,表示任意两两城市间拥挤程度的和。 提示 将边根据拥挤值排序,分别计算每条边对答案的贡献,用并查集维护连通块大小。 数据规模:1≤n≤10 5 ,1≤x,y≤n ,1≤v≤10 7 。 程序 #include<iostream> #include<algorithm> using namespace std; typedef long long LL; const int N = 100010; struct Edge { int x, y; LL v; }; inline bool cmp(Edge A, Edge B) { return ___①___; } int n; LL ans; int fa[N], sz[N]; Edge e[N]; int find(int x) { return fa[x] == x ? x : ___②___; } int main() { cin >> n; for (int i = 1; i <= n; ++i) { ___③___; } for (int i = 1; i < n; ++i) { cin >> e[i].x >> e[i].y >> e[i].v; } sort(e + 1, e + n, cmp); for (int i = 1; i < n; ++i) { int x = find(e[i].x), y = find(e[i].y); ans += ___④___; fa[x] = y; ___⑤___; } cout << ans << endl; return 0; } ①处应填( )。 A.x > B.x A.x < B.x A.v < B.v A.v > B.v 第41题 单选题 (3分) 【接上一题】②处应填( )。 find(fa[x]) fa[x] = find(x) fa[x] = find(fa[x]) x = find(fa[x]) 第42题 单选题 (3分) 【接上一题】③处应填( )。 fa[i] = i, sz[i] = 1 fa[i] = sz[i] = 0 fa[i] = 0, sz[i] = 1 fa[i] = 0, sz[i] = i 第43题 单选题 (3分) 【接上一题】④处应填( )。 sz[x] + sz[y] (sz[x] + sz[y]) * e[i].v sz[x] * sz[y] * e[i].v e[i].v * sz[x] * sz[y] 第44题 单选题 (3分) 【接上一题】⑤处应填( )。 sz[x] += sz[y] fa[y] = x sz[x] = 0 sz[y] += sz[x]
09-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值