鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 18

[已解决]C语言小练习-第三期【招人】

[复制链接]
发表于 2020-5-13 12:02:46 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xiaosi4081 于 2020-5-13 13:21 编辑

欢迎来到第三期的C语言小练习


在开始之前,先要说一件事:

我们学生党要开学了
帖子要没人更新了

所以……
也要向外招人了!

要求:

技术水平:中等
题目要求:可以有些提高,但不能太难
题目数量:能保证周更就行


如果有人想加入,又符合要求,请在评论区留言



今天的题目:
小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。
小哼让每个同学写出一个自己最想读的书的ISBN号。
当然有一些好书会有很多同学都喜欢,这样就会收集到很多重复的ISBN号。
小哼需要去掉其中重复的ISBN号,即每个ISBN号只保留一个,也就说同样的书只买一本(学校真是够抠门的)。
然后再把这些ISBN号从小到大排序,小哼将按照排序好的ISBN号去书店去买书。请你协助小哼完成“去重”与“排序”的工作。

                               
登录/注册后可看大图

输入格式:
输入有2行,第1行为一个正整数,表示有n个同学参与调查(n<=100)。
第2行有n个用空格隔开的正整数,为每本图书的ISBN号(假设图书的ISBN号在1~1000之间)。
输出格式:
输出也是2行,第1行为一个正整数k,表示需要买多少本书。
第2行为k个用空格隔开的正整数,为从小到大已排好序的需要购买的图书ISBN号。


例1:
输入:
10
20 40 32 67 40 20 89 300 400 15 
输出:
8
15 20 32 40 67 89 300 400 

最佳答案
2020-5-13 17:09:48
#include<stdio.h>

int main()
{
        int a[1000], n, i, j, t;
        scanf("%d", &n);
        for(i=0; i<n; i++)
        {
                scanf("%d", &a[i]);
        }
        
        for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
        int temp=-1;
        for(i=n-1; i>=0; i--)
        {
                if(temp != a[i])
                        printf("%d ", a[i]);
                        temp = a[i];
        }
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-13 12:05:54 | 显示全部楼层
给啊哈C恰饭(确信)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 12:07:45 | 显示全部楼层
老八秘制 发表于 2020-5-13 12:05
给啊哈C恰饭(确信)

那么下期去洛谷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 12:28:11 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-5-13 16:19 编辑

有人吗?
这个帖子要沉底了 @永恒的蓝色梦想  @zltzlt @Hello. @WangJS
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 12:29:06 | 显示全部楼层
老八秘制 发表于 2020-5-13 12:05
给啊哈C恰饭(确信)

我的第一本编程书就是 啊哈C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 12:34:22 | 显示全部楼层
liuzhengyuan 发表于 2020-5-13 12:29
我的第一本编程书就是 啊哈C

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

使用道具 举报

 楼主| 发表于 2020-5-13 12:51:28 | 显示全部楼层
那么下期去别的网站抽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 13:25:38 | 显示全部楼层
我才刚学c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 13:46:06 | 显示全部楼层
liuzhengyuan 发表于 2020-5-13 12:29
我的第一本编程书就是 啊哈C

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

使用道具 举报

 楼主| 发表于 2020-5-13 14:49:41 | 显示全部楼层
有人吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 17:09:48 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>

int main()
{
        int a[1000], n, i, j, t;
        scanf("%d", &n);
        for(i=0; i<n; i++)
        {
                scanf("%d", &a[i]);
        }
        
        for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
        int temp=-1;
        for(i=n-1; i>=0; i--)
        {
                if(temp != a[i])
                        printf("%d ", a[i]);
                        temp = a[i];
        }
        
        return 0;
}

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
xiaosi4081 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2020-5-14 10:11:06 | 显示全部楼层

你是来求解答还是来出题的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 10:13:23 | 显示全部楼层
4goodworld 发表于 2020-5-14 10:11
你是来求解答还是来出题的呢?

求解答、来加入都可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 21:57:08 From FishC Mobile | 显示全部楼层
标记,回头上机给出不要注释的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 13:28:57 | 显示全部楼层
有些看不懂。你是要同学输入一个序号,你就给加进去,程序自动识别,是一样的就不加。最后排序输出。还是不管输入多少个序号都给加进去,然后把一样的删除,再排序输出?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 08:17:59 From FishC Mobile | 显示全部楼层
405794672 发表于 2020-5-15 13:28
有些看不懂。你是要同学输入一个序号,你就给加进去,程序自动识别,是一样的就不加。最后排序输出。还是不 ...


上面输入一个数,表示有多少个ISBN号,下面输入所有ISBN号,然后把一样的删除,再排序输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 08:20:59 From FishC Mobile | 显示全部楼层
liuzhengyuan 发表于 2020-5-13 12:29
我的第一本编程书就是 啊哈C

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

使用道具 举报

发表于 2020-5-18 16:39:19 | 显示全部楼层
有几点疑问,但是我刚学C,根本找不出来有什么问题。希望大家帮忙找找
#include<stdio.h>
int TOTAL;//换成全局变量,照样是输入几本就几本,去重完全没有起作用
void total(int book[], int n)//统计书本数量并去重
{
        int j,m;
        for (j = 0; j < n-1; j++)
        {
                if (book[j] == book[j + 1])
                {
                        for (m = j; m < n - j; m++)
                        {
                                if (m < n - 2)
                                {
                                        book[m + 1] = book[m + 2];
                                }
                                else
                                {
                                        book[m + 1] = NULL;
                                }
                        }
                        TOTAL--;
                        //i--;
                }
        }
        printf("总共需要买%d本书\n", TOTAL);
}
void sort(int book[],int n)//对里面内容排序并输出
{
        int i,j;
        for (i = 0; i < n - 1; i++)
        {
                for (j = 0; j < n - 1 - i; j++)
                {
                        if (book[j] > book[j + 1])
                        {
                                book[j] ^= book[j+1];
                                book[j+1] ^= book[j];
                                book[j] ^= book[j+1];
                        }
                }
        }
        for (i = 1; i <= (n / 10); i++)
        {
                for (j = (i - 1) * 10 + 1; j <= i * 10; j++)
                {
                        printf("%d\t", book[j]);
                }
                printf("\n");
        }
}

void main()
{
        int i,num[100];
        printf("请输入想买书的同学数量(不超过100人):\n");
        scanf("%d\n",&TOTAL);
        //fflush(stdin);加此代码则不执行sort函数
        for (i = 0; i < TOTAL; i++)//总是先输入,再连续出现两行printf内容,然后才正常。始终未查出什么原因
        {
                printf("请输入第%d个同学想买的书的IBSN号:\n",i+1);
                scanf("%d",&num[i]);
        }
        total(num, TOTAL);
        sort(num, TOTAL);
        //sort(num, total(num, n));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 17:18:08 | 显示全部楼层
妈的,想了好半天,这下不会还有问吧?
#include<stdio.h>
#include<stdlib.h>
int TOTAL;
void total(int book[])//统计书本数量并去重
{
        int j,m,i;
        
        for (j = 0; j < TOTAL-1; j++)
        {
                for (m = j+1; m < TOTAL; )
                {                        
                        if(book[j] == book[m])
                        {
                                for (i = m; i < TOTAL; i++)
                                {
                                        if (i < TOTAL - 1)
                                        {
                                                book[i] = book[i + 1];
                                        }
                                        else
                                        {
                                                book[i] = 0;
                                        }
                                }

                                TOTAL--;
                        }
                        else
                        {
                                m++;
                        }
                }
        }        
        printf("总共需要买%d本书\n", TOTAL);        
}
void sort(int book[])//对里面内容排序并输出
{
        int i,j;
        for (i = 0; i <TOTAL - 1; i++)
        {
                for (j = 0; j < TOTAL - 1 - i; j++)
                {
                        if (book[j] > book[j + 1])
                        {
                                book[j] ^= book[j+1];
                                book[j+1] ^= book[j];
                                book[j] ^= book[j+1];
                        }
                }
        }
        for (i = 0; i < (TOTAL / 10+1); i++)
        {
                for (j = i  * 10 ; j < (i +1)* 10&&j<TOTAL; j++)
                {
                        printf("%d\t", book[j]);
                }
                printf("\n");
        }
}

void main()
{
        int i, num[100];
        printf("请输入想买书的同学数量(不超过100人):\n");
        scanf("%d",&TOTAL);//百度知道解释将\n去掉。果然不出现顺序颠倒的问题了。
        
        for (i = 0; i < TOTAL; i++)
        {
                printf("请输入第%d个同学想买的书的IBSN号:\n",i+1);
                scanf("%d",&num[i]);
        }
        total(num);
        sort(num);        
        system("pause");
}

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
xiaosi4081 + 1 + 1 good

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 19:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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