zoukankan      html  css  js  c++  java
  • 一道面试题(C语言)

    题:输入一个数,列出所有加和等于该数的式子。

    分析:

    以 6 为例:

    从上面的分析就比较容易找到规律了。

    C语言代码:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int n;      // 输入的数
     6     printf("Please input the number:");
     7     scanf("%d",&n);
     8     test(n);
     9 }
    10 
    11 void test(int n)
    12 {
    13     if(n==1){
    14         printf("1=1
    ");
    15         return;
    16     }
    17     int i,j,k;  // 循环变量
    18     for(i=1;i<=n/2;i++)
    19     {
    20         for(j=(n-i);j>=i;j--)
    21         {
    22             printf("%d",i);
    23             for(k=0;k<(n-i-j);k++)
    24             {
    25                 printf("+1");
    26             }
    27             printf("+%d=%d
    ",j,n);
    28         }
    29     }
    30 }

    这是同学去面试的时候,给的一道上机题,刚看到我就想用递归(当然,没有做出来),所以……for循环大法好(^_^)

    上面的是错的,心痛,这个应该是对的吧,缺点就是只能正常输出20以内的,数组变成指针会好些??

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int num;
     5     int i,j,k,p,q,r;
     6     int flag=1;
     7     int a[20];
     8     int temp=0;
     9     printf("Please input the number:");
    10     scanf("%d",&num);
    11     for(i=2;i<=num;)
    12     {
    13         if(flag)
    14         {
    15             for(j=0;j<i;j++) a[j] = 1;
    16             a[i-1] = num-(i-1);
    17             flag = 0;
    18             for(j=0;j<i;j++)
    19             {
    20                 if(j==0) printf("%d",a[j]);
    21                 else printf("+%d",a[j]);
    22             }
    23             printf("=%d
    ",num);
    24         }
    25         if(!flag)
    26         {
    27             for(p=2;p<=i;)
    28             {
    29                 for(k=i-1;k>0;k--)
    30                     if((k-p+1)>=0 && a[k]-a[k-p+1]>=2)
    31                     {
    32                         for(q=k;q>=k-p+1;q--) temp += a[q];
    33                         a[k-p+1]++;
    34                         for(r=k-p+2;r<k;r++) a[r]=a[k-p+1];
    35                         a[k] = temp - (p-1)*a[k-p+1];
    36                         temp=0;
    37                         for(j=0;j<i;j++)
    38                         {
    39                             if(j==0) printf("%d",a[j]);
    40                             else printf("+%d",a[j]);
    41                         }
    42                         printf("=%d
    ",num);
    43                         break;
    44                     }
    45                 if(k==0) p++;
    46             }
    47             flag=1;
    48         }
    49         if(flag) i++;
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    Windows脚本 Bat批处理命令使用教程
    [Jobdu] 题目1420:Jobdu MM分水果
    排序算法的时间复杂度和空间复杂度
    (转) CS的顶级会议和期刊
    句柄是什么?1
    批处理for命令详解(转)
    cmd批处理常用符号详解
    【转帖】请问两个大于号>>代表什么意思?
    今天玩angry birds
    C/C++数组名与指针区别深入探索
  • 原文地址:https://www.cnblogs.com/Super-Lee/p/9994434.html
Copyright © 2011-2022 走看看