吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1917|回复: 12
收起左侧

[求助] 输入10个数,根据提示进行从小到大输出或从大到小输出

[复制链接]
苏白水 发表于 2020-11-18 19:32
本帖最后由 苏白水 于 2020-11-18 20:53 编辑

请问,能不能帮我看一下,为什么会在输入第二组数据后输出两组答案?


谢谢


[C] 纯文本查看 复制代码
#include"stdio.h"
#include"stdio.h"
#include"math.h"
#include"string.h"
int main()
{
    int a[10]={0};
    int i,m,j,k,tmp,s;
    char n;
    while(scanf("%c",&n)!=EOF)
    {

        a[10]={0};
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }

        tmp=0;
        for(i=0;i<9;i++)
            for(j=9;j>=i+1;j--)
            {
                if(a[j]>a[j-1]&&n==68)
                {
                    tmp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=tmp;
                }
                else if(a[j]<a[j-1]&&n==65)
                {
                    tmp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=tmp;
                }
            }
          for(j=0;j<10;j++)
          {
              printf("%d",a[j]);
              if(j==9)
                printf("\n");
              else
                printf(" ");
          }



    }
    return 0;
}



题目

题目

测试结果

测试结果

免费评分

参与人数 1吾爱币 +1 收起 理由
mxy马11 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fireandice 发表于 2020-11-18 19:47
[C++] 纯文本查看 复制代码
using namespace std;

int compare(const void *a, const void *b)
{
	return ( *(int*)a - *(int*)b );
}

int main()
{
	int num[10] = {0};
	int i;
	for(i=0;i<10;i++)
		cin >> num[i]; 
		
	for(i=0;i<10;i++)
	cout << num[i] << " ";
	
	cout << endl; 
	qsort(num,10,sizeof(num[0]),compare); 
	
	for(i=0;i<10;i++)
	cout << num[i] << " ";
	 
	return 0;
}
消消停停 发表于 2020-11-18 20:25
前面加个判断是否输入'A'、'D',他把回车键也当字符读进去了
sergin 发表于 2020-11-18 20:26
看看这个是你要的结果吗?
#include"stdio.h"
#include"math.h"
#include"string.h"
int main()
{
    int a[10]={0};
    int i,m,j,k,tmp,s;
    char n;
    while(scanf("%c",&n)!=EOF)
    {
               
        a[10] = 0;
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
               
        for(i=0;i<9;i++)
            for(j=0;j<=9 - i - 1;j++)
            {
                if(a[j]<a[j+1]&&n==68)
                {
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
                if(a[j]>a[j+1]&&n==65)
                {
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
                        for(j=0;j<10;j++)
                        {
                                printf("%d",a[j]);
                                if(j==9)
                                        printf("\n");
                                else
                                        printf(" ");
                        }
                       
                       
                       
    }
    return 0;
}
ciker_li 发表于 2020-11-18 20:34
for (i = 1; i < 10; i++)
                        for (j = 9; j >= i; j--)
                                   {
                if(a[j]>a[j-1]&&n==68)
                {
                    tmp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=tmp;
                }
                else if(a[j]<a[j-1]&&n==65)
                {
                    tmp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=tmp;
                }
            }
i改成从1开始
如果从0开始,j=0时,a[j-1]超出范围,溢出了
DivineWing 发表于 2020-11-18 20:57
本帖最后由 DivineWing 于 2020-11-18 21:19 编辑

1. while(scanf("%c",&n)!=EOF)这段代码,在第一次输入完回车的时候又读入了第一次的字符(运算结果看起来是这样)。
2. a[10]={0};这是要清空数组的意思吗,定义只给了10个位置,这里的a[10]是指向第11个位置,有些编译器都会直接报错了。
3. 给楼主个建议,自己在代码片段中插入printf()函数,比如在a[10]={0};前加一个printf(“这是无关代码”),分析代码的运行是不是和你的逻辑步骤相符,然后bug就会清晰多了。
花好s月圆 发表于 2020-11-18 21:01
冒泡排序,数据结构的基础题。
 楼主| 苏白水 发表于 2020-11-18 21:06
本帖最后由 苏白水 于 2020-11-18 21:09 编辑

1.C++ 我还没学 ,谢谢大佬了   沙发#
2.数组是从a[0]开始读取的 ,输出也是0-9  ,a[10]={0}是让每次多组数据测试时清空上一次的数据
3.5# 的答案是对的,但是在测试第二组数据的时候会输出2组答案(上一次的和这一次的)
4.排序的问题我解决了(是自己粗心了
DivineWing 发表于 2020-11-18 21:15
苏白水 发表于 2020-11-18 21:06
1.C++ 我还没学 ,谢谢大佬了   沙发#
2.数组是从a[0]开始读取的 ,输出也是0-9  ,a[10]={0}是让每次多组 ...

5楼和你都是同样的问题,不过这种清空数组的方法在我的认知里是无效的(可能我学的不咋样),你自己在那儿加个printf试试
KID丶 发表于 2020-11-18 21:25
这个是哪里的题目?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-16 10:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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