当前位置: 代码迷 >> C语言 >> 帮忙看看!!谢谢!!
  详细解决方案

帮忙看看!!谢谢!!

热度:139   发布时间:2005-10-19 17:57:00.0
帮忙看看!!谢谢!!

编写一个程序:N(正或负)整数在主函数中输入,调用一个函数pick2(),把个位数是2的数挑出来,而且要求记住原来的序号,然后再调用一个函数sort()将挑出来的数按大到小排列,返回主函数后打印出排序好的数及相应的原序号.
----------------解决方案--------------------------------------------------------

#include <stdio.h>

void main() { int n; printf("请输入数的个数:"); scanf("%d",&n); int i; int a[100]; for(i=1;i<=n;i++) { scanf("%d",&a[i]); } for(i=1;i<=n;i++) { if(a[i]%10==2) { printf("%d\t%d\n",a[i],i); } } } 我这样只能输出个位是2的数和它的位置,怎么样编pick2()函数才能把个位是2的数提出来并保留位置呢?用结构么? 怎么保存这些数到一个新的数组里并排序呢? 谁有方法编出pick2()和sort()函数来让我学习一下,谢谢


----------------解决方案--------------------------------------------------------
用2维数组,int a[2][100];
用a[0][i]存储数据,用a[1][i]存储位置。在排序时a[0][i]和a[1][i]要一起动。
----------------解决方案--------------------------------------------------------
就算我用了这样的2维数组了,怎么把个位是2的数去出来放到一个新数组里?难道你要对所有的数排序?你把程序写出来我看
----------------解决方案--------------------------------------------------------

刚开始学c,所以方法可能很烂,不过终于可以实现了,感觉还不错,我是设计了这样一个数组:偶数位存数后面一位就存它的原序号.谁有好方法还希望拿出来讨论. #include <stdio.h> #include <math.h> int pick2(int d) { if((int)fabs(d)%10==2) return 1; else return 0; }

void sort(int a[],int n) { int c[100],i,j,m,l,t1,t2; j=0; for(i=0;i<=2*n-2;i=i+2) { if(pick2(a[i])==1) { c[j]=a[i]; c[j+1]=a[i+1]; j=j+2; } } m=j-2;//c[m]是数组c的倒数第2位; for(i=0;i<m;i=i+2) { l=i; for(j=i+2;j<=m;j=j+2) if(c[l]<c[j])l=j; if(l!=i) {t1=c[l]; c[l]=c[i]; c[i]=t1; t2=c[l+1];c[l+1]=c[i+1];c[i+1]=t2; }

} for(i=0;i<=m;i=i+2) printf("%d %d\n",c[i],c[i+1]); }

void main() { int n; printf("请输入数的个数:"); scanf("%d",&n); int i; int a[100]; for(i=0;i<=(2*n-2);i=i+2) { scanf("%d",&a[i]); a[i+1]=i/2+1; } sort(a,n); }


----------------解决方案--------------------------------------------------------
  相关解决方案