永发信息网

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

答案:2  悬赏:10  手机版
解决时间 2021-11-29 09:06
  • 提问者网友:暮烟疏雨之际
  • 2021-11-28 13:01
对数组A中的N(0<N<100)个整数从小到大进行连续编号
最佳答案
  • 五星知识达人网友:猎心人
  • 2021-11-28 14:25
需要用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;

结果如下:

追问在我的基础上可以改吗追答判断重复数不是很好判断,除非再弄一个数组,把原数组中重复的数字合并处理。
全部回答
  • 1楼网友:鱼芗
  • 2021-11-28 15:31
#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;
}追问初学者,看不懂啊。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯