永发信息网

对数组A中的N(0<N<100)个整数从小到大进行连续编号

答案:2  悬赏:10  手机版
解决时间 2021-11-29 09:06
对数组A中的N(0<N<100)个整数从小到大进行连续编号
最佳答案
需要用2个二外的数组进行存储,这样就可以在O(n)的时间复杂度下完成计算。具体过程如下:
#include
#define N 100
int main()
{
    int a[N], temp1[N] = { 0 }, temp2[N] = { 0 }, c[N];
    int n = 0,count=0;
    printf("please input n integers: 
");
    for (int i = 0;; i++)
    {
        scanf_s("%d", &a[i]);
        n++;
        if (getchar() == '
')
        break;
    }
    count = n;
 
    n = 1;
    for (int i = 0; i < count; i++)
        temp1[a[i]]++;
    for (int i = 0; i < N; i++)
        if (temp1[i] != 0)
            temp2[i] = n++;
    for (int i = 0; i < count; i++)
        c[i] = temp2[a[i]];
    for (int i = 0; i < count; i++)
        printf("%d ", c[i]);
    printf("
");
    return 0;

结果如下:

追问在我的基础上可以改吗追答判断重复数不是很好判断,除非再弄一个数组,把原数组中重复的数字合并处理。
全部回答
#include 

const int MAXSIZE = 100;

void sort(int a[],int n) {
int i,j,k,t;
for(i = 0; i < n - 1; ++i) {
k = i;
for(j = i + 1; j < n; ++j) {
if(a[k] > a[j]) k = j;
}
if(k != i) {
t = a[k];
a[k] = a[i];
a[i] = t;
}
}
}

int main() {
int a[MAXSIZE],i,k,n = 0;
printf("输入整数:");
while(scanf("%d",&a[n]) == 1 && n < MAXSIZE) {
printf("输入整数(q to quit):");
++n;
}
sort(a,n);
printf("1 ");
k = 1;
for(i = n - 2; i >= 0; --i) {
if(a[i] != a[i + 1]) ++k;
printf("%d ",k);
}
printf(" ");
return 0;
}追问初学者,看不懂啊。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
火车k87次15车94号位置在哪?坐车流程跟动车
淘宝店铺违规处罚,扣12分,会关闭店铺几天?
360属于互联网科技 媒体 和通信行业吗
喜多坊国际婚纱摄影地址在什么地方,想过去办
生产中的跑冒滴漏怎么管理
如何去除PDF文件背景图
精密油压式虎钳和精密倍力式虎钳有什么差别
①用完全平方公式简便运算 1.89.8² 2.47
星戒中林天为什么要离开鸿界!!
“嫩”字开头的成语接龙有哪些?
什么是三差改正,其改正数的大小各与什么有关?
荆州市至天津走国道线路
俊台铝材如何
悟门了当,澈见圣凡不二,迷悟不二,生死涅盘
46+136+64x46用简便计算
推荐资讯
SAT 考试部分成绩是否可以拼?
递等式计算(能简算的要简算).(1)2.5×0.
硬之城商城运营怎么样
1.5L大家用什么机油
敢怒不敢言
现代途胜车质量怎么样?
72像素印刷
我家是四平的自驾 我想去周边去去游玩漂流了
梦见活捉一女鸟人
骑士新员,胡德这几年在NBA是怎样的存在
打咬肌瘦脸针五天了,怎么没看出脸小
论世事评什么意思1
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?