全-2输出不就完了。
看你的话,我想了想你这个方法还是不错的. 只要少少做个修改. 你这里 -2 是因为数组中最小的值为3,如果全部是5即:{5,5,5,5,5,} 那么明显就是要-4.
所以,我想是不是先找出数组中最小的数,如数值a,则每个位上的数再-(a-1)就可以得到每个位上的数字的顺序排位值.
一点意见,请指教~~~
[QUOTE]#include <stdio.h>
void main()
{
int i,j,k,n,m=1,r=1,a[2][100] = {0};
printf("Please enter n:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("a[%d]= ",i);
scanf("%d",&a[0][i]);
}
while(m<=n)
{ for(i=0;i<n;i++)
{ if(a[1][i]!=0)
continue;
k=i;
for(j=i;j<n;j++)
if(a[1][j]==0 && a[0][j]<a[0][k]) k=j;
a[1][k]=r++;
m++;
for(j=0;j<n;j++)
if(a[1][j]==0 && a[0][j]==a[0][k])
{ a[1][j]=a[1][k];
m++;
}
break;
}
}
for(i=0;i<n;i++)
printf("a[%d]=%d, %d\n",i,a[0][i],a[1][i]);
} [/QUOTE]
这是经过运行的,可以看看!
#include <stdio.h>
void main()
{
int n;
int i, j, min;
int m = 1, r = 1; //r为编号,m为登记了的个数
int a[2][100] = {0};
printf("please input n:\n");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
printf("a[%d]=",i);
scanf("%d\n",&a[0][i]);
}
while(m <= n)
{
for(i = 0; i < n; i++)
{
if(a[1][i] != 0) //已经登记过的数跳过(相同的值导致这个语句)
continue;
min = i;
for(j = i; j < n; j++)
if(a[1][j] == 0 && a[0][min] > a[0][j])
min = j;
a[1][min] = r++;
m++;
for(j = 1; j < n; j++) //处理相同记录
if(a[1][j] == 0 && a[0][j] == a[0][min])
{
a[1][j] = a[1][min];
m++;
}
}
}
for(i = 0; i < n; i++)
printf("a[%d] = %d,%d\n",i, a[0][i],a[1][i]);
getch();
}
#include <stdio.h>
void main()
{
int n;
int i, j, min;
int m = 1, r = 1; //r为编号,m为登记了的个数
int a[2][100] = {0};
printf("please input n:\n");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
printf("a[%d]=",i);
scanf("%d\n",&a[0][i]);
}
while(m <= n)
{
for(i = 0; i < n; i++)
{
if(a[1][i] != 0) //已经登记过的数跳过(相同的值导致这个语句)
continue;
min = i;
for(j = i; j < n; j++)
if(a[1][j] == 0 && a[0][min] > a[0][j])
min = j;
a[1][min] = r++;
m++;
for(j = 1; j < n; j++) //处理相同记录
if(a[1][j] == 0 && a[0][j] == a[0][min])
{
a[1][j] = a[1][min];
m++;
}
}
}
for(i = 0; i < n; i++)
printf("a[%d] = %d,%d\n",i, a[0][i],a[1][i]);
getch();
}