有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再按照指定的排序方式把这些数排序。

cjl1166 2013-02-01 12:06:08
Description

有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再按照指定的排序方式把这些数排序。

Input

第1行为字母A或D,A表示按照升序排序,D表示按照降序排序。

第2行开始有若干个用一个空格或换行符分隔的正整数。

Output

相互之间用一个空格分隔的经去重和排序后的正整数。最后一个数后没有空格。

Sample Input

A

20 40 32 67 40 20 89 300 400 15

Sample Output

15 20 32 40 67 89 300 400
#include<stdio.h>
#define N 100
void main()
{
char c;
int n,a[100],b[100],i,j,k = 0,flag = 1,t;
scanf("%d",&c);
for(i = 0; i < N; i++)
scanf("%d",&a[i]);
for(i = 0; i < N; i++)
{
flag = 1;
for(j = 0; j < i; j++)
if(a[i] == b[j])
flag = 0;
if(flag)
{
b[k] = a[i];
k++;
}
}
if(c=='A')
{
for(i = 0; i < k-1; i++)
{
n=i;
for(j=i+1;j<k;j++)
if(b[j]<b[n])
n=j;
t=b[n];b[n]=b[i];b[i]=t;
}
}
if(c=='D')
{
for(i = 0; i < k-1; i++)
{
n=i;
for(j=i+1;j<k;j++)
if(b[j]>b[n])
n=j;
t=b[n];b[n]=b[i];b[i]=t;
}
}

for(i = 0; i < k; i++)
printf("%-4d",b[i]);
}



没有输出,,,真心不懂了
...全文
2068 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxyifan 2013-02-01
  • 打赏
  • 举报
回复
刚刚写了一下: //char只占一个字节,比较小 char c[1000]={0}; //给定的int数组,或者把给定的整数放在这个数组里 int d[100] = {1,2,3,4,3,2,0}; //将整数数组里的值当作char数据的下标,置为'1' for(int i=0;i<100;i++) { int dd = d[i]; c[dd]='1'; } //打印char数组的下标 for(int ii=0;ii<1000;ii++) { if(c[ii] == '1') { printf("%d\r\n",ii); } }
zodiac1111 2013-02-01
  • 打赏
  • 举报
回复
sort |uniq > ret 不好意思,我也走错区了
赵4老师 2013-02-01
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
rocktyt 2013-02-01
  • 打赏
  • 举报
回复
如果用c++来写,会变成这样
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
    char c;
    cin>>c;
    vector<int> v;
    copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v));
    if (c=='A')
        sort(v.begin(), v.end(), less<int>());
    else if (c=='D')
        sort(v.begin(), v.end(), greater<int>());
    v.erase(unique(v.begin(), v.end()), v.end());
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
}
c需要自己做数据管理,自己写排序和去除重复元素不好意思我走错区了
xxyifan 2013-02-01
  • 打赏
  • 举报
回复
之前有个算法是这样,一次循环: 1.分配一个char c[1000] 2.循环给定的数据组,置c[i]=1 3.打印c[i]=1的下标,下标即是给定的数据
hugett 2013-02-01
  • 打赏
  • 举报
回复
题目有说n=100么。。 你 for(i = 0; i < N; i++)scanf("%d",&a[i]);当然没输出。。因为还没输入完。。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧