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