单元加

 

已知输入整数14时,运行结果如下,试根据规律编写程序

#include <stdio.h>
int t;//标记i的重复次数
//void divide(int i,int number)
//{
//int k,n=number;
//while(n>i)
//{
//  n=n-i;
//  if((n+i)!=number)
//    {
//      for(k=0;number-k>n;k=k+i)
//          printf("%d+",i);
//      printf("%d\n",n);
//  }
//  else
//    printf("%d+%d\n",i,n);
//}
//}
void divide(int i,int n)
{
    printf("%d",i);
    for(int j=0;j<t;j++)
    {
        printf("+%d",i);    
    }
    printf("+%d\n",n-i);
    if(n-i <= i)
    {
        return;
    }
    else{
        t ++;
        divide(i,n-i);    
    }
}
int main()
{
    int n;
    printf("Input:");
    scanf("%d",&n);
    for(int i=1;i<=n/2;i++)
    {
        t = 0;
        divide(i,n);
    }
    return 0;
}

已知输入整数14时,运行结果如下,试根据规律编写程序

//递归
#include <stdio.h>
int num(int a,int i,int n)
{
    int j=0,k;
    if(a<=0)
        return a;
    k=num(a-i,i,n+i)+i;
    for(j=i;j<=n;j=j+i)
        printf("%d+",i);
    printf("%d\n",k);
    return k;
}
int main()
{
    int number,n;
    printf("input:");
    scanf("%d",&number);
    for(n=1;n<=number/2;n++)
        num(number-n,n,n);
    return 0;
}
//非递归
#include <stdio.h>
void divide(int i,int num,int n)
{
    int t,flag = 0;//t:标记最尾的一个数
    if(n % i)
    {
        t = n % i;
        flag = 1;
    }
    else
        t = i;
    while(t < n)
    {
        for(int k = 0 ; k < num - 1; k ++)
        {
            printf("%d+",i);
        }
        if(flag)//不能整除
        {
            printf("%d+%d\n",i,t);
        }
        else{
            printf("%d\n",t);
        }
        t += i;
        num --;
    }
}
int main()
{
    int n;
    printf("Input:");
    scanf("%d",&n);
    for(int i=1;i<=n/2;i++)
        divide(i,n/i,n);
    return 0;
}

 

posted @ 2016-02-13 21:33  我在这儿  阅读(305)  评论(0编辑  收藏  举报