• 华为软件编程题:随机数按计数输出


      1 /* array_iterate.cpp
      2  * 输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。
      3  * 从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,
      4  * 并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。
      5  * 如果计数到达数列尾段,则返回数列首位置继续计数。
      6  */
      7 
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #include <string.h>
     11 
     12 void array_iterate(int len, int input_array[], int m, int output_array[])
     13 {
     14     int i = 0, j = 0; 
     15     int *flag_array = (int *)malloc(len * sizeof(int)); 
     16 
     17     //判断数组中的数是否已经被取出,初始化全置零,表示未被取出
     18     //最开始写的为:memset(flag_array, 0x00, sizeof(flag_array)); 
     19     //结果出错了,原因是函数传参过程中的指针降级
     20     //导致sizeof(flag_array)返回的是一个指针类型大小的的字节数
     21     memset(flag_array, 0x00, len * sizeof(int)); 
     22     
     23     for (i = 0, j = 0; i < len; i++)
     24     {
     25         while (m)
     26         {
     27             if (!flag_array[j])
     28             {
     29                 m--; 
     30             }
     31             if (j != len - 1)
     32             {
     33                 j++; 
     34             }
     35             else
     36             {
     37                 j = 0; 
     38             } 
     39         }
     40 
     41         if (j)
     42         {
     43             output_array[i] = input_array[j - 1]; 
     44             flag_array[j - 1] = 1; 
     45         }
     46         else
     47         {
     48             output_array[i] = input_array[len - 1]; 
     49             flag_array[len - 1] = 1; 
     50         }
     51 
     52         m = output_array[i]; 
     53     }
     54 }
     55 
     56 int main()
     57 {
     58     int len = 0, m = 0; 
     59     int i = 0, input_flag = 0; 
     60     
     61     //为了提高程序的鲁棒性,写了下面一段循环
     62     //此处关键是flushall()的使用,如果不使用
     63     //由于键盘输入缓存的存在使得程序陷入死循环
     64     //关于flush()参见我的下一篇博客
     65     while (!input_flag)
     66     {
     67         printf("请输入数列的长度:"); 
     68         input_flag = scanf("%d", &len); 
     69         if (!input_flag)
     70         {
     71             printf("输入有误,仅可输入数字!
    "); 
     72             flushall(); 
     73         }
     74     }
     75     
     76     int *input_array = (int *)malloc(len * sizeof(int)); 
     77     int *output_array = (int *)malloc(len * sizeof(int)); 
     78     
     79     //input_flag使用后要重置
     80     input_flag = 0; 
     81     while (!input_flag)
     82     {
     83         printf("请输入初始数列:");
     84         for (i = 0; i < len; i++)
     85         {
     86             input_flag = scanf("%d", &input_array[i]); 
     87             if (!input_flag)
     88             {
     89                 printf("输入有误,仅可输入数字!
    "); 
     90                 flushall(); 
     91                 break; 
     92             }
     93         }
     94     }
     95 
     96     //printf("请输入初始数列:"); 
     97     //for (i = 0; i < len; i++)
     98     //{
     99     //    scanf("%d", &input_array[i]); 
    100     //}
    101     
    102     //printf("请输入初始计数值:"); 
    103     //scanf("%d", &m); 
    104     
    105     input_flag = 0; 
    106     while (!input_flag)
    107     {
    108         printf("请输入初始计数值:"); 
    109         input_flag = scanf("%d", &m); 
    110         if (!input_flag)
    111         {
    112             printf("输入有误,仅可输入数字!
    "); 
    113             flushall(); 
    114         }
    115     }
    116 
    117     array_iterate(len, input_array, m, output_array); 
    118     printf("数值出列的顺序为:"); 
    119     for (i = 0; i < len; i++)
    120     {
    121         printf("%d ", output_array[i]); 
    122     }
    123     printf("
    "); 
    124     
    125     return 0; 
    126 }
    127 
    128 
    129 
    130 //以下是网上找到的代码,空间复杂度比我的小
    131 //使用到了循环链表,但是鲁棒性不好
    132 
    133 //#include <stdio.h>
    134 //#include <stdlib.h>
    135 //#include <string.h>
    136 //
    137 //typedef struct Node
    138 //{
    139 //    int num; 
    140 //    struct Node *next; 
    141 //}node; 
    142 //
    143 //node *creat(int len, int input_array[])
    144 //{
    145 //    node *h, *s, *p; 
    146 //    int i; 
    147 //    h = (node *)malloc(sizeof(node)); 
    148 //    h->num = input_array[0]; 
    149 //    p = h; 
    150 //    for (i = 1; i < len; i++)
    151 //    {
    152 //        s = (node *)malloc(sizeof(node)); 
    153 //        s->num = input_array[i]; 
    154 //        p->next = s; 
    155 //        p = s; 
    156 //    }
    157 //    p->next = h; 
    158 //
    159 //    return (h); 
    160 //}
    161 //
    162 //void array_iterate(int len, int input_array[], int m)
    163 //{
    164 //    node *q, *p, *s; 
    165 //    int i = 0, j = 0, k; 
    166 //    int output_array[4]; 
    167 //    p = creat(len, input_array); 
    168 //    while (p->next != p)
    169 //    {
    170 //        for (i = 1; i < m; i++)
    171 //        {
    172 //            q = p; 
    173 //            p = p->next; 
    174 //        }
    175 //        m = p->num; 
    176 //        //printf("%5d", m); 
    177 //
    178 //        output_array[j++] = m; 
    179 //
    180 //        s = p; 
    181 //        q->next = p->next; 
    182 //        p = p->next; 
    183 //        free(s); 
    184 //        s = NULL; 
    185 //    }
    186 //
    187 //    m = p->num; 
    188 //    //printf("%5d
    ", m); 
    189 //    output_array[j] = p->num; 
    190 //    k = j; 
    191 //    for (j = 0; j <= k; j++)
    192 //    {
    193 //        printf("%5d", output_array[j]); 
    194 //    }
    195 //}
    196 //
    197 //int main()
    198 //{
    199 //    int input_array[] = {3, 1, 2, 4}; 
    200 //    int len = 4; 
    201 //    int m = 7; 
    202 //    int output_array[4]; 
    203 //    array_iterate(len, input_array, m); 
    204 //}
  • 相关阅读:
    用户描述
    课堂练习
    一阶段11.21
    一阶段11.20
    一阶段 11.19
    自己动手写spring(五) bean的生命周期管理
    自己动手写spring(四) 整合xml与注解方式
    自己动手写spring(三) 支持注解方式
    自己动手写spring(二) 创建一个bean工厂
    自己动手写spring(一) 使用digester
  • 原文地址:https://www.cnblogs.com/andrewlee0708/p/array_iterate.html
Copyright © 2020-2023  润新知