Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203898
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 798
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-14 14:54
文章分类

全部博文(87)

文章存档

2015年(87)

我的朋友

分类: C/C++

2015-08-20 14:21:21

本文纯属自创,转载请注明出处!
如发现代码有问题请留言

1.删除重复的数值

描述:   将一个整型数组中的各个值进行比对,删除重复的数值,并向前对齐。
运行时间限制:  10 Sec
内存限制:  128 MByte
输入:   多行,每行一组数据,用“,”隔开,其最大长度小于4096个字符。
输出:   多行,每行对应删除重复后的结果。
样例输入:  3,5,4,5,3 
                
9,9,10,2,3,10,21,2,10
样例输出:  3,5,4
                 9,10,2,3,21

代码如下(自创):

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #define N 2
  3. #define M 10

  4. int main(void)
  5. {
  6.     int n;
  7.     int s;
  8.     int i = 0;
  9.     int j, k;
  10.     int a[N][M] = {
  11.         {3, 5, 4, 5, 3},
  12.         {9, 9, 10, 2, 3, 10, 21, 2, 10, 6}
  13.     };
  14.     int flen[N], llen[N];

  15.     for (i=0; i<N; i++)
  16.     {
  17.         j = M;
  18.         while(j>=0 && a[i][--j]==0);
  19.         flen[i] = j+1;
  20.     }
  21.     
  22.     printf("输入:\n");

  23.     for (i=0; i<N; i++)
  24.     {
  25.         for (j=0; j<flen[i]; j++)
  26.         {
  27.             printf("%d ", a[i][j]);
  28.         }
  29.         printf("\n");
  30.     }

  31.     for (k=0; k<N; k++)
  32.     {
  33.         n = 0;
  34.         while(n<flen[k])
  35.         {
  36.             s = a[k][n];
  37.             i = n;
  38.             while(i<flen[k]){
  39.                 while(a[k][++i] == s)
  40.                 {
  41.                     for (j=i; j<flen[k]; j++)
  42.                     {
  43.                         a[k][j] = a[k][j+1];
  44.                     }
  45.                     flen[k]--;
  46.                 }
  47.             }
  48.             n++;
  49.         }
  50.         llen[k] = flen[k];
  51.     
  52.     }
  53.     
  54.     printf("\n输出:\n");

  55.     for (i=0; i<N; i++)
  56.     {
  57.         for (j=0; j<llen[i]; j++)
  58.         {
  59.             printf("%d ", a[i][j]);
  60.         }
  61.         printf("\n");
  62.     }

  63.     return 0;
  64. }


2.分数转小数
描述: 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。
         如:1/3 = 0.33333333... 则循环节为3 输出为0.(3)
运行时间限制: 无限制
内存限制: 无限制
输入:   函数原型:
                  int Calculate(const int numerator, const int denominator ,char *decimaltostring)
           输入参数:
                  int numerator 分子
                  int denominator: 分母

输出:   输出参数:
                  char * decimaltostring: 存放计算结果。

样例输入: 1
                3
样例输出:    0.(3)
答案提示:   限制小数部分的最大位数为100位。
                  如果本来是无限循环小数,但循环节大于100位,认为不是循环小数,直接输出。

3.最大数
描述: 
随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数。

输入: 10个小于10的数字:
                  1 2 3 4 5 6 7 8 9 0
输出: 输出最大三位数
                   987

样例输入:1 2 3 4 5 6 7 8 9 0

样例输出:987

 

算法思路:

先随机输出10个整数,范围[0,9]

然后删除数组中重复数字;方法同第一题

最后取数组最大的一个数,放入另一个数组,再从剩下的数据中取最大的那个,以此类推。新的数组就是最大的三位数。
代码如下(自创):

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. #define N 3
  5. int main(void)
  6. {
  7.     int s, i, j, k, m;
  8.     int n = 0;
  9.     int count = 0;
  10.     int length;
  11.     int num[10];
  12.     int maxnum[N];

  13.     length = sizeof(num)/sizeof(int);

  14.     printf("输入10个小于10的数字:\n");
  15.     srand((unsigned int)time(NULL));
  16.     for(i=0; i<length; i++)
  17.     {
  18.         num[i] = rand()%10;
  19.         printf("%d ",num[i]);
  20.     }
  21.     printf("\n去重:\n");

  22.     while(n<length)
  23.     {
  24.         s = num[n];
  25.         i = n+1;
  26.         while(i<length)
  27.         {
  28.             while(num[i++] == s)
  29.             {
  30.                 for(j=(--i); j<length; j++)
  31.                 {
  32.                     num[j] = num[j+1];
  33.                 }
  34.                 length--;
  35.             }
  36.         }
  37.         n++;
  38.     }

  39.     for(i=0; i<length; i++)
  40.     {
  41.         printf("%d ", num[i]);
  42.     }

  43.     for(i=0; i<N; i++)
  44.     {
  45.         m=0;
  46.         maxnum[i] = num[0];
  47.         for(j=1; j<length; j++)
  48.         {
  49.             if(num[j]>maxnum[i])
  50.             {
  51.                 maxnum[i]=num[j];
  52.                 m = j;
  53.             }
  54.         }
  55.         if(m==length-1)
  56.         {
  57.             num[m] = 0;
  58.         }
  59.         else
  60.         {
  61.             for(k=m; k<length-1; k++)
  62.             {
  63.                 num[k] = num[k+1];
  64.             }
  65.             length--;
  66.         }
  67.     }

  68.     printf("\n最大的三位数:\n");

  69.     for(i=0; i<3; i++)
  70.     {
  71.         printf("%d",maxnum[i]);
  72.     }
  73.     printf("\n\n");
  74.    
  75.     return 0;
  76. }


4.奇偶排序

描述: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序。
运行时间限制:  10 Sec
内存限制:  128 MByte
输入:   输入一串乱序的数字。
输出:   输出排序后的数字。

样例输入:12 34 5 7 92 3 8

样例输出:7 5 3 8 12 34 92

算法思想:
输入一串乱序的数字放入数组,并统计实际长度;
将奇数和偶数分别放如两个不同的数组;
使用冒泡排序法分别排序;
整合输出;

代码如下(自创):

点击(此处)折叠或打开

  1. #include <stdio.h>


  2. #define MAX 1000
  3. #define SWAP(x,y) {int t; t = x; x = y; y = t;}

  4. void sort_maxtomin(int array[], int len);
  5. void sort_mintomax(int array[], int len);

  6. int main(void)
  7. {
  8.     int i=0;
  9.     char status;
  10.     int length=0, blen = 0, slen = 0;
  11.     int num[MAX] = {0};
  12.     int odd[MAX] = {0};
  13.     int even[MAX] = {0};

  14.     do
  15.     {
  16.         printf("请输入一个非负整数数字: ");
  17.         status = scanf("%d", &num[i]);
  18.         i++;
  19.     }while(status);

  20.     length = i-1;

  21.     for(i=0; i<length; i++)
  22.     {
  23.         printf("%2d ", num[i]);
  24.     }
  25.     for(i=0; i<length; i++)
  26.     {
  27.         if(num[i]%2 == 1)
  28.         {
  29.             odd[blen]=num[i];
  30.             blen++;
  31.         }
  32.         else
  33.         {
  34.             even[slen]=num[i];
  35.             slen++;
  36.         }
  37.     }

  38.     sort_maxtomin(odd, blen);
  39.     sort_mintomax(even, slen);

  40.     printf("\n");
  41.     for(i=0; i<blen; i++)
  42.     {
  43.         num[i] = odd[i];
  44.         num[blen+i] = even[i];
  45.     }
  46.     printf("\n");
  47.     for(i=0; i<slen; i++)
  48.     {
  49.         num[blen+i] = even[i];
  50.     }

  51.     for(i=0; i<length; i++)
  52.     {
  53.         printf("%2d ", num[i]);
  54.     }

  55.     return 0;
  56. }

  57. void sort_maxtomin(int array[], int len)
  58. {
  59.     int i, j;
  60.     for(i=0; i<len-1; i++)
  61.     {
  62.         for(j=len-1; j>i; j--)
  63.         {
  64.             if(array[j]>array[j-1])
  65.             {
  66.                 SWAP(array[j], array[j-1]);
  67.             }
  68.         }
  69.     }
  70. }

  71. void sort_mintomax(int array[], int len)
  72. {
  73.     int i, j;
  74.     for(i=0; i<len-1; i++)
  75.     {
  76.         for(j=len-1; j>i; j--)
  77.         {
  78.             if(array[j]<array[j-1])
  79.             {
  80.                 SWAP(array[j], array[j-1]);
  81.             }
  82.         }
  83.     }
  84. }

阅读(1057) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~