牛客网习题

  1. 有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数?
  • 25个数 分成 5 组 A/B/C/D/E,分别排序,5 次。
  • 每组选出其中最大的数,排序,1次,假设最大的三个数为 A[0]>B[0]>E[0]

得到的信息:

  • A[0]已经确定是最大值了
  • C[0]/D[0] < A[0]/B[0]/C[0] ,故最大的三个数一定不存在与 C/D中

分析:最大的三个数分布可能的情况有三种

  • 全在 A中
  • A中一个,B中两个
  • A、B、E 分组中各一个

现在要获取第二、三大值
比较 A[1]、A[2]、B[0]、B[1]、E[0],其中选出最大的两个数,即分别是第二、三大数

故最少需要比较 7

  1. 在一个axb的整数矩阵中,寻找最长的严格递减数字序列。数列可以沿着横或竖的方向,但不能重叠,该问题的最优复杂度是____。举例来说,以下是一个3x5的矩阵,其结果如下:

     

    4262551-6e0ec2809b6ce2b5.png

    image.png

     

    O(a*b)

### C语言输入输出练习题 #### 题目一:打印星号三角形 此程序接收一个整数 `n` 并打印由星号组成的直角三角形,每行的星号数量等于当前行数。 ```c #include<stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { printf("* "); } printf("\n"); } } return 0; } ``` 上述代码通过嵌套循环实现星号图案的打印[^1]。外层循环控制行数,内层循环负责在同一行中打印相应数量的星号。 #### 题目二:特殊格式化星号三角形 该程序同样接受一个整数 `n` ,并按照特定格式打印星号构成的图形,在每一行最后一个位置打印单个星号。 ```c #include<stdio.h> int main() { int n = 0; while (~scanf("%d", &n)) { int i = 0, j = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { if (j != 1) { printf(" "); } if (i == j) { printf("*\n"); } } } } return 0; } ``` 这段代码展示了如何利用条件语句调整输出格式,使得最后一列与其他同[^2]。 #### 题目三:字符串截取与复制 这个例子涉及从标准输入读入一段文本以及一个正整数 `m` 。随后将原串自第 `m` 位起至结尾部分拷贝到新字符数组中再显示出来。 ```c #include<iostream> #include<queue> using namespace std; int main() { char str[30] = { 0 }; cin.getline(str, sizeof(str)); int m; cin >> m; char copystr[30]={0}; char *p = str + m -1; char *q = copystr; while(*p != '\0') { *q = *p; p++; q++; } printf("%s",copystr); return 0; } ``` 这里运用指针操作完成子串提取工作,并且注意初始化目标缓冲区以防止潜在错误[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值