当前位置: 首页 > news >正文

ACM社团第一次测试题解(禁止直接复制粘贴提交)

第一题:中位数

思路:

解法一:暴力比较,两个数之间一直比较得出中位数

解法二:快排函数,数组中间值即为中位数

代码:

1.c语言版:

#include <stdio.h>
int arr[10010];
void solve() {int a, b, c;scanf("%d %d %d", &a, &b, &c);arr[1] = a;arr[2] = b;arr[3] = c;// 使用冒泡排序来排序 arr[1], arr[2], arr[3]for (int i = 1; i <= 2; i++) { // 需要排序两轮for (int j = 1; j <= 2; j++) {if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j + 1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}// 输出中间值printf("%d\n", arr[2]);
}int main() {int t;scanf("%d", &t);while (t--) {solve();}return 0;
}

2.c++版:

#include<bits/stdc++.h>
using namespace std;
int arr[10010];
void solve() {int a, b, c;cin >> a >> b >> c;arr[1] = a;arr[2] = b;arr[3] = c;sort(arr + 1, arr + 1 + 3);cout << arr[2] << endl;return;
}
int main() {int t;cin >> t;while(t--)solve();return 0;
}

第二题:求和

思路:判断是否有两个数相加为第三个数即可

代码:
1.c语言版:

#include <stdio.h>
void solve() {int a, b, c;scanf("%d %d %d", &a, &b, &c);if (a + b == c || a + c == b || b + c == a) {printf("YES\n");} else {printf("NO\n");}
}
int main() {int t;scanf("%d", &t);while (t--) {solve();}return 0;
}

2.c++版:

#include<bits/stdc++.h>
using namespace std;
void solve() {int a, b, c;cin >> a >> b >> c;if (a + b == c || a + c == b || b + c == a) {cout << "YES\n";}else {cout << "NO\n";}return;
}
int main() {int t;cin >> t;while(t--)solve();return 0;
}

第三题:字符倒置简易版

思路:使用gets函数读入字符串(字符串中有可能含有空字符串),根据其长度倒序输出即可

代码:

1.c语言:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[10000];
int b,i;
gets(a);
b=strlen(a);
for(i=b-1;i>=0;i--)
printf("%c",a[i]);
return 0;
}

2.c++:

#include<bits/stdc++.h>
using namespace std;
void solve() {string s;getline(cin,s);int l = s.size();for (int i = s.size() - 1; i >= 0; i--) {cout << s[i];}return;
}
int main() {solve();return 0;
}

第四题:求a/b

思路:除法不多说,注意(保留10位小数)即可

代码:

#include<stdio.h>
int main()
{int a,b;while(scanf("%d %d",&a,&b)!=EOF){printf("%.10lf\n",(double)a/b);}return 0;
}

第五题:这怕又是一道水题了

思路:判断长度为n的数组中的每个元素是否都比m小,若小于m的个数=n,即yes,否则no

代码:

1.c:

#include <stdio.h>
int a[100010];
void solve() {int n, m;scanf("%d %d", &n, &m);  // 使用 scanf 获取 n 和 mint num = 0;// 输入数组for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);  // 输入数组元素}
// 计算符合条件的个数for (int i = 1; i <= n; i++) {if (m > a[i]) {num++;  // 如果 m 大于 a[i],计数加 1}}
// 判断并输出结果if (num == n) {printf("yes\n");} else {printf("no\n");}
}
int main() {solve();return 0;
}

2.c++:

//}
#include<bits/stdc++.h>
using namespace std;
int a[100010];
void solve() {int n, m;cin >> n >> m;int num = 0;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++)if (m > a[i])num++;if (num == n)cout << "yes\n";else cout << "no\n";return;
}
int main() {solve();return 0;
}

第六题:插数排序

思路:根据题目要求先进行判断,若小于最后一个数再进行插入,我们需要遍历一遍数组,找到一个合适位置进行插入(其左边的数<=要插入的数<=其右边的数)
这道题可以去学一下set

代码(未使用set):

#include <stdio.h>
int main() {int n, num, k;int arr[10010];  // 假设最多有 10000 个元素int idx = 0;  // 当前数组的元素数量// 输入 n 个整数scanf("%d", &n);while (n--) {scanf("%d", &num);// 插入前检查是否已经存在,避免重复int exists = 0;for (int i = 0; i < idx; i++) {if (arr[i] == num) {exists = 1;break;}}if (!exists) {arr[idx++] = num;  // 插入元素到数组}}// 输入 k 并插入scanf("%d", &k);int exists = 0;for (int i = 0; i < idx; i++) {if (arr[i] == k) {exists = 1;break;}}if (!exists) {arr[idx++] = k;  // 插入 k}// 使用插入排序对数组进行排序for (int i = 1; i < idx; i++) {int key = arr[i];int j = i - 1;// 将大于 key 的元素右移while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}// 输出集合中的元素for (int i = 0; i < idx; i++) {printf("%d ", arr[i]);}return 0;
}

使用set:

#include<bits/stdc++.h>
using namespace std;
void solve() {int n, m, k;cin >> n;set<int>s;while (n--) {cin >> m;s.insert(m);}cin >> k;s.insert(k);for (auto ss: s) {cout << ss << " ";}return;
}
int main() {solve();return 0;
}

第七题:星号图形

思路:发现规律,从第一行开始,*前面的空格数=n-当前行数,*数=2*当前行数-1

代码:

1.c:

#include <stdio.h>void solve() {int n;scanf("%d", &n);  // 读入整数nfor (int i = 1; i <= n; i++) {// 打印前导空格for (int j = 1; j <= n - i; j++) {printf(" ");}// 打印星号for (int k = 1; k <= 2 * i - 1; k++) {printf("*");}// 打印换行printf("\n");}
}int main() {solve();  // 调用solve函数return 0;
}

2.c++:

#include<bits/stdc++.h>
using namespace std;
void solve() {int n;cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n - i; j++)cout << " ";for (int k = 1; k <= 2 * i - 1; k++)cout << "*";cout << endl;}return;
}
int main() {solve();return 0;
}

 第八题:冠军

思路:

输入字符串,若相邻的五个字符分别为'edgnb',则将个数+1

代码:

1.c:

#include <stdio.h>
#include <string.h>void solve() {char s[100001];  // 假设最大字符串长度为 100000scanf("%s", s);  // 读取字符串int l = strlen(s);  // 获取字符串长度int k = 0;// 注意:循环到 l - 5,因为我们要检查每个位置是否有 'edgnb' 字符串for (int i = 0; i <= l - 5; i++) {if (s[i] == 'e' && s[i + 1] == 'd' && s[i + 2] == 'g' && s[i + 3] == 'n' && s[i + 4] == 'b') {k++;  // 如果匹配,计数加 1}}printf("%d\n", k);  // 输出结果
}int main() {solve();  // 调用 solve 函数return 0;
}

2.c++:

#include<bits/stdc++.h>
using namespace std;
void solve() {string s;cin >> s;int l = s.size();int k = 0;for (int i = 0; i <= l; i++) {if (s[i] == 'e' && s[i + 1] == 'd' && s[i + 2] == 'g' && s[i + 3] == 'n' && s[i + 4] == 'b')k++;}cout << k << endl;return;
}
int main() {solve();return 0;
}

http://www.lryc.cn/news/479646.html

相关文章:

  • redis:zset有序集合命令和内部编码
  • Day107:代码审计-PHP模型开发篇MVC层RCE执行文件对比法1day分析0day验证
  • Web服务nginx实验1访问特定目录
  • 数据结构之二叉树前序,中序,后序习题分析(递归图)
  • Me-LLaMA——用于医疗领域的新型开源大规模语言模型
  • C#-常见异常的处理方式(持续更新)
  • 「Mac玩转仓颉内测版2」入门篇2 - 编写第一个Cangjie程序
  • 注册登录学生管理系统小项目
  • qt QCompleter详解
  • YOLOv11融合特征细化前馈网络 FRFN[CVPR2024]及相关改进思路
  • 【前端知识】JS模块规范
  • vue3展示pag格式动态图
  • 代码随想录算法训练营第三十九天|Day39 动态规划
  • qt QMovie详解
  • 数据集整理
  • 认证授权基础概念详解
  • 美国地址生成器站点
  • 微信4.0大版本升级跨平台支持界面全面改版
  • 不想贴秋膘?正确打开秋冬运动姿势
  • 【AIGC半月报】AIGC大模型启元:2024.11(上)
  • 纯前端生成PDF(jsPDF)并下载保存或上传到OSS
  • 海外媒体发稿:旅游业媒体推广12个方面的注意事项-华媒舍
  • 分割回文串(DFS)
  • Qt第三课 ----------容器类控件
  • 打印菱形(C语言)
  • Oracle 19c 中启用 scott 用户
  • git commit 校验
  • 【AtCoder】Beginner Contest 377-B.Avoid Rook Attack
  • 江协科技STM32学习- P38 软件SPI读写W25Q64
  • 【Triton 教程】低内存 Dropout