鱼C论坛

 找回密码
 立即注册
查看: 4780|回复: 6

从a中删除n个数字,按原顺序排列最小,帮我看看程序错在哪里?谢谢了!!!

[复制链接]
发表于 2012-8-27 16:32:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 394428311 于 2012-8-27 16:33 编辑

注释都在下面,帮我看看吧!我已经尽力了!
非常感谢!!!
  1. #include <stdio.h>

  2. main()
  3. {
  4.         char fun(char *a,int n);
  5.         char a[]={'7','4','2','6','8','3','6','1','3','9','8','4','\0'};
  6.         int n=5;
  7.         fun(a,n);
  8.         puts(a);
  9. }

  10. char fun(char *a,int n)
  11. {
  12.         int i,j=0,t,min=a[0];        //假定a[0]=min
  13.         for(i=1;i<=n;i++)
  14.         {
  15.                 if(min>a[i])
  16.                 {
  17.                         min = a[i];                //求出a[0]~a[n]之间的min
  18.                         t=i;                        //求出最小值a[i]前面有多少项,放在t中
  19.                 }
  20.         }
  21.         for(i=t;a[j++]=a[i];i++)//从min开始,到a[i] == '\0'结束
  22.         {
  23.                 ;
  24.         }
  25.         if(n==0)
  26.         {
  27.                 return;                                //当n == 0,结束递归(应该不需要确定返回值吧!因为只需要改变char a[]就行)
  28.         }
  29.         else
  30.         {
  31.                 return fun(a,n-t);        //n的值在慢慢变小
  32.         }
  33. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-27 17:11:08 | 显示全部楼层
看了 5分钟愣是没看懂,表达的什么意思
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-27 18:21:35 | 显示全部楼层
  1. #include <stdio.h>


  2. main()

  3. {
  4.        
  5.         char fun(char *a,int n);
  6.        
  7.         char a[]={'7','4','2','6','8','3','6','1','3','9','8','4','\0'};
  8.        
  9.         int n=5;
  10.        
  11.         fun(a,n);
  12.        
  13.         puts(a);
  14.        
  15. }


  16. char fun(char *a,int n)                //这里你传递过来的是n=5

  17. {
  18.        
  19.         int i,j=0,t,min=a[0];        //假定a[0]=min                这里min='7'  
  20.        
  21.         for(i=0;i<=n;i++)                //数组下标是从0 开始的 这里只循环6次 因为n=5
  22.                
  23.         {
  24.                
  25.                 if(min>a[i])                        //这里当min的值 大于后面的5个字符数 时
  26.                        
  27.                 {
  28.                        
  29.                         min = a[i];                //就把小值 赋给min   所以最后min='2'
  30.                        
  31.                         t=i;                        // 把数组元素 '2' 的下标赋给t  所以 t=2
  32.                        
  33.                 }
  34.                
  35.         }
  36.        
  37.         for(i=t;a[j++]=a[i];i++)//从min开始,到a[i] == '\0'结束  这个循环结束的时候 a[j]=a[i]='2'
  38.                
  39.         {
  40.                
  41.                 ;
  42.                
  43.         }
  44.        
  45.         if(n==0)
  46.                
  47.         {
  48.                
  49.                 return;                                //当n == 0,结束递归(应该不需要确定返回值吧!因为只需要改变char a[]就行)
  50.                
  51.         }
  52.        
  53.         else
  54.                
  55.         {
  56.                
  57.                 return fun(a,n-t);        //n的值在慢慢变小
  58.                
  59.         }
  60.        
  61. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-27 18:22:01 | 显示全部楼层
把一些给你注释了 这个程序真的有点乱 你写清楚点吧
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-8-27 18:46:09 | 显示全部楼层

程序还是运行不过啊!在 for(i=t;a[j++]=a[i];i++)这里i的值不确定,真奇怪!明明在前面i已经被赋值了啊!求解释!!!谢谢了!!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-3 17:30:20 | 显示全部楼层
我改了一下,vc6运行,你可以看看。
#include <stdio.h>

void Delete_n_data(int data[], int data_len, int delete_n);
void Insert_sort(int *sort_data, int length);

int main()
{
        int data[12] = {7, 4, 2, 6, 8, 3, 6, 1, 3, 9, 8, 4};
        int delete_n = 5;
        int i = 0;

        for(i = 0 ; i < 12; i++) {
                printf("%d ", data[i]);
        }
        printf("\n");
        Delete_n_data(data, 12, delete_n);
        for(i = 0 ; i < 12; i++) {
                printf("%d ", data[i]);
        }
        printf("\n");

        return 0;
}

void Delete_n_data(int data[], int data_len, int delete_n)
{
        int tmp_data[256] = {0};
        int i = 0;
        int tmp_len = data_len - 1;

        for(i = 0 ; i < data_len; i++) {
                tmp_data[i] = data[i];
        }
        Insert_sort(tmp_data, data_len);

        for(delete_n--; delete_n >= 0; delete_n--) {
                while(tmp_len >= 0){
                        if(data[tmp_len] == tmp_data[delete_n]) {
                                data[tmp_len] = 0; //我将删除的数等于0
                                tmp_len = data_len - 1;
                                break;
                        } else {
                                tmp_len--;
                        }
                }
        }
}

void Insert_sort(int *sort_data, int length)
{
        int i=0,j=0;
        int tmpData = 0;

        for(i = 1 ; i < length; i++) {
                j=i;
                tmpData= *(sort_data+i);
                while(j > 0 && tmpData < sort_data[j-1]) {
                        sort_data[j] = sort_data[j-1];
                        j--;
                }
                sort_data[j] = tmpData;
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-3 18:51:03 | 显示全部楼层
我题目也看不懂
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表