鱼C论坛

 找回密码
 立即注册
查看: 2449|回复: 12

[已解决]C语言编写程序

[复制链接]
发表于 2022-12-2 17:06:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.任意输入20个正整数,找出其中的素数,并将这些素数按由小到大排序。要求:判断一个数是否为素数用函数实现;排序用函数实现。
最佳答案
2022-12-2 17:59:17
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int prime(int x) {
  5.         if (x <= 1) return 0;
  6.         for (int i = 2; i * i <= x; ++i) {
  7.                 if (x % i == 0)
  8.                         return 0;
  9.         }
  10.         return 1;
  11. }

  12. void sort(int *a, int len) {
  13.         for (int i = 1; i <= len; ++i) {
  14.                 for (int j = 1; j < i; ++j) {
  15.                         if (a[i] < a[j]) {
  16.                                 int t = a[i];
  17.                                 a[i] = a[j];
  18.                                 a[j] = t;
  19.                         }
  20.                 }
  21.         }
  22. }

  23. int main() {
  24.         int n = 20, x, a[21], tot = 0;
  25.         for (int i = 1; i <= 20; ++i) {
  26.                 scanf("%d", &x);
  27.                 if (prime(x)) a[++tot] = x;
  28.         }
  29.         sort(a, tot);
  30.         for (int i = 1; i <= tot; ++i)
  31.                 printf("%d ", a[i]);
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-2 17:46:08 | 显示全部楼层
C不会...
C++到会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-2 17:59:17 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int prime(int x) {
  5.         if (x <= 1) return 0;
  6.         for (int i = 2; i * i <= x; ++i) {
  7.                 if (x % i == 0)
  8.                         return 0;
  9.         }
  10.         return 1;
  11. }

  12. void sort(int *a, int len) {
  13.         for (int i = 1; i <= len; ++i) {
  14.                 for (int j = 1; j < i; ++j) {
  15.                         if (a[i] < a[j]) {
  16.                                 int t = a[i];
  17.                                 a[i] = a[j];
  18.                                 a[j] = t;
  19.                         }
  20.                 }
  21.         }
  22. }

  23. int main() {
  24.         int n = 20, x, a[21], tot = 0;
  25.         for (int i = 1; i <= 20; ++i) {
  26.                 scanf("%d", &x);
  27.                 if (prime(x)) a[++tot] = x;
  28.         }
  29.         sort(a, tot);
  30.         for (int i = 1; i <= tot; ++i)
  31.                 printf("%d ", a[i]);
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-2 18:00:29 | 显示全部楼层

很相似的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-2 19:39:20 | 显示全部楼层

C++版 :
  1. #include <iostream>
  2. using namespace std;

  3. bool isSuShu(int a){
  4.         if (a == 2 || a == 3 || a == 5 || a == 7){
  5.                 return true;
  6.         }
  7.         else{
  8.                 if (a % 2 == 0 || a % 3 == 0 || a % 5 == 0 || a % 7 == 0 || a == 1){
  9.                         return false;
  10.                 }
  11.                 else{
  12.                         return true;
  13.                 }
  14.         }
  15. }

  16. void sort(int *a, int len){
  17.         for (int i = 0; i < len - 1; i++){
  18.                 for (int j = 0; j < len - i - 1; j++){
  19.                         if (a[j] > a[j + 1]){
  20.                                 int temp = a[j];
  21.                                 a[j] = a[j + 1];
  22.                                 a[j + 1] = temp;
  23.                         }
  24.                 }
  25.         }
  26. }

  27. int main(){
  28.         int a[20], xiabiao = 0, x;
  29.        
  30.         for (int i = 0; i < 20; i++){
  31.                 cin >> x;
  32.                 if (isSuShu(x)){
  33.                         a[xiabiao] = x;
  34.                         xiabiao++;
  35.                 }
  36.         }
  37.         sort(a, xiabiao);
  38.         for (int i = 0; i < xiabiao; i++){
  39.                 cout << a[i] << ' ';
  40.         }
  41.         cout << endl;
  42.        
  43.         return 0;
  44. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-2 21:24:59 | 显示全部楼层

嗨嗨嗨,我来Hack你:
  1. 121 144 169 0 156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
复制代码

你的程序输出了121和144,但是他们两个都是合数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 07:38:26 | 显示全部楼层
zhangjinxuan 发表于 2022-12-2 21:24
嗨嗨嗨,我来Hack你:

你的程序输出了121和144,但是他们两个都是合数

你输入了什么啊??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 07:42:54 | 显示全部楼层
zhangjinxuan 发表于 2022-12-2 21:24
嗨嗨嗨,我来Hack你:

你的程序输出了121和144,但是他们两个都是合数

要回车呀!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 09:33:02 | 显示全部楼层
元豪 发表于 2022-12-3 07:38
你输入了什么啊??


输入:
  1. 121 144 169 0 156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
复制代码

输出:
  1. 121 144
复制代码

正确输出:

复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 09:35:19 | 显示全部楼层

Hack的意思:在codeforces比赛中,当某道题Pretest Passed之后,可以选择锁定(Lock)该题代码,之后就可以查看同一个Room内其他选手该题的代码(当然了,这也是已经通过pretest的),并试图找出其中的漏洞,自己出一个数据(可以手打,也可以提交数据生成器)让这个代码不能通过,这就是Hack,有时也称Challenge.一次成功的Hack可以得到100分,而如果没有成功,将会被扣50分,分别被称为(un)successful hacking attempt.

专业名词应该要了解一下滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 10:10:14 | 显示全部楼层
zhangjinxuan 发表于 2022-12-3 09:35
专业名词应该要了解一下滴

我是说:
应该这样:
  1. 121
  2. 144
  3. 169
  4. 0
  5. 156
  6. 0
  7. 0
  8. 0
  9. 0
  10. 0
  11. 0
  12. 0
  13. 0
  14. 0
  15. 0
  16. 0
  17. 0
  18. 0
  19. 0
  20. 0
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 10:24:13 | 显示全部楼层
新人观摩下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 10:38:41 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2022-12-3 10:41 编辑
元豪 发表于 2022-12-3 10:10
我是说:
应该这样:


可以不用啊,scanf和cin遇到空格就停止读入,你Python玩的有点多吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表