精华内容
下载资源
问答
  • 编写函数输出图形

    2016-10-12 15:11:09
    void trangle(int n)//定义类型为void的函数trangle() { int i,j; for(i=0;i;i++)//控制行 { for(j=0;j;j++)//控制每行输出的空格数 putchar(' '); for(j=0;j*i;j++)//控制每行输出的*号数 ...
    #include<stdio.h>
    void trangle(int n)//定义类型为void的函数trangle()
    {
    int i,j;
    for(i=0;i<n;i++)//控制行
    {
    for(j=0;j<=n-i;j++)//控制每行输出的空格数
    putchar(' ');
    for(j=0;j<=2*i;j++)//控制每行输出的*号数
    putchar('*');
    putchar('\n');


    }


    }
    int main()
    {
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    printf("\n");
    trangle(n);
    return 0;


    }
    展开全文
  • 编写一个求斐波那契数列的递归函数,输入n值,使用该递归函数输出如下图形。 P.S:借鉴的别人的代码。。。。。实在是想不出来了, 把图形从中间分成两部分,依次根据斐波那契数列的公式输入。 但是斐波那契数列...

    编写一个求斐波那契数列的递归函数,输入n值,使用该递归函数,输出如下图形。

    P.S:借鉴的别人的代码。。。。。实在是想不出来了,

    把图形从中间分成两部分,依次根据斐波那契数列的公式输入。

    但是斐波那契数列与本题不完全相同。

    斐波那契数列:

    F(0)=1;

    F(1)=1;

    F(n)=F(n-1)+F(n-2);(n>=2)

    但是本题依图形来看应是:

    F(0)=0;

    F(1)=1;

    F(n)=F(n-1)+F(n-2);(n>=2)


    #include <iostream>
    using namespace std;
    int fun(int n)
    {
    	if(n==0)
    		return 0;
    	else if(n==1)
    		return 1;
    	else
    		return fun(n-1)+fun(n-2);
    }
    int main()
    {
    	int n;
    	while(1)
    	{
    		cout<<"请输入n:";
    		cin>>n;
    		if(n==0)
    			break;
    		for(int i=0;i<n;++i)
    		{
    			for(int j=0;j<(2*n-1)-(2*i+1);++j)
    				cout<<" ";
    			for(int k=0;k<2*i+1;++k)
    				cout<<fun(k)<<" ";
    			cout<<endl;
    		}
    		cout<<endl;
    	}
    	return 0;
    }


    展开全文
  • 但是,回溯法中通过构造约束函数,可以大大 提升程序效率,因为在深度优先搜索的过程中,不断的将每解(并不一定是完整的,事实上这也就是构造约束函数的意义所在)与约束函数进行对照从而删除一些 不可
    解决这个问题一般有以下击中方法:
    1.普通递归。
    2.回溯法(决策树)对每个元素决策,取还是不取,分别递归。其实还是递归
    3.位图(用n位表示二进制数表示各个字符出现的可能性,1表示出现,0表示不出现)

    1.递归
    设计思路:
    首先,递归是使用的if else结构。
    然后,就是if中填条件,再在else写调用自身的函数。  
    详细思路,请看代码。

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    
    using namespace std;
    
    const int SIZE=3;
    
    void Subset(char str[], int n)
    {
        if(n==0) {      //控制输出
            cout<<"{";
            for(int i=0; i<SIZE; i++)
                if(str[i] != ' '){
                    cout<<str[i];
                }
            cout<<"}"<<endl;
        }else {
            /*** 先递归 ***/
            Subset(str, n-1);
            if(n>0) {
                char newstr[SIZE] = {' '};//去掉就把该位置的元素置成空
                /*** 还原之前的状态 ***/
                strcpy(newstr,str);
                /*** 越来越少的元素 ***/
                newstr[n-1]= ' ';
                /*** 再次递归 ***/
                Subset(newstr,n-1);
            }
        }
    }
    
    int main ()
    {
    
        char str[5]="abc";
    
        Subset(str, SIZE);
    
        return  0;
    }
    



    2.回溯法的基本思想
     
    对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。 这棵树的每条完整路径都代表了一种解的可能。通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。但是,回溯法中通过构造约束函数,可以大大 提升程序效率,因为在深度优先搜索的过程中,不断的将每个解(并不一定是完整的,事实上这也就是构造约束函数的意义所在)与约束函数进行对照从而删除一些 不可能的解,这样就不必继续把解的剩余部分列出从而节省部分时间。
     
    回溯法中,首先需要明确下面三个概念:
     
    (一)约束函数:约束函数是根据题意定出的。通过描述合法解的一般特征用于去除不合法的解,从而避免继续搜索出这个不合法解的剩余部分。因此,约束函数是对于任何状态空间树上的节点都有效、等价的。
     
    (二)状态空间树:刚刚已经提到,状态空间树是一个对所有解的图形描述。树上的每个子节点的解都只有一个部分与父节点不同。
     
    (三)扩展节点、活结点、死结点:所谓扩展节点,就是当前正在求出它的子节点的节点,在DFS中,只允许有一个扩展节点。活结点就是通过与约束函数的对照,节点本身和其父节点均满足约束函数要求的节点;死结点反之。由此很容易知道死结点是不必求出其子节点的(没有意义)。
     
    深度优先搜索(DFS)和广度优先搜索(FIFO)
     
    在 分支界限法中,一般用的是FIFO或最小耗费搜索;其思想是一次性将一个节点的所有子节点求出并将其放入一个待求子节点的队列。通过遍历这个队列(队列在 遍历过程中不断增长)完成搜索。而DFS的作法则是将每一条合法路径求出后再转而向上求第二条合法路径。而在回溯法中,一般都用DFS。为什么呢?这是因 为可以通过约束函数杀死一些节点从而节省时间,由于DFS是将路径逐一求出的,通过在求路径的过程中杀死节点即可省去求所有子节点所花费的时间。FIFO 理论上也是可以做到这样的,但是通过对比不难发现,DFS在以这种方法解决问题时思路要清晰非常多。
     
    因此,回溯法可以被认为是一个有过剪枝的DFS过程。
     
    利用回溯法解题的具体步骤
     
    首先,要通过读题完成下面三个步骤:
     
    (1)描述解的形式,定义一个解空间,它包含问题的所有解。
     
    (2)构造状态空间树。
     
    (3)构造约束函数(用于杀死节点)。
     
     
    然后就要通过DFS思想完成回溯,完整过程如下:
     
    (1)设置初始化的方案(给变量赋初值,读入已知数据等)。
     
    (2)变换方式去试探,若全部试完则转(7)。
     
    (3)判断此法是否成功(通过约束函数),不成功则转(2)。
     
    (4)试探成功则前进一步再试探。
     
    (5)正确方案还未找到则转(2)。
     
    (6)已找到一种方案则记录并打印。
     
    (7)退回一步(回溯),若未退到头则转(2)。
     
    (8)已退到头则结束或打印无解。
     
    回溯法的数据结构
     
    回溯法的状态空间树,在计算机上的数据结构有两种表示方法。当用k表示树的节点层数,n表示节点总数,m表示解的总数时:
     
    (一)用m个k元组表示m种不同的解。其中,每组中的元素是[1,n]中的一个元素。在Pascal中,可以这样定义变量:
     
    var a:array[1..k,1..m]of integer;(integer可以依n的范围决定)
     
    (二)用m个n元组表示m种不同的解。因为所有的节点都包含在每个解的表示中,每组中的元素只有两种情况,被选用和不被选用。在Pascal中,可以这样定义变量:
     
    var a:array[1..n,1..m]of boolean;
     
    这两种数据结构的解空间最多都含有2n个不同的元组
     
    #include<iostream>   
      using   namespace   std;   
      int   str[]={1,2,3,4,5,6,7};   
      bool   bo[7];   
      long   xnum=0;   
         
      /*   
      int   print(int   i)   
      {   
          if(i>=7)                                     i>=7   就输出结果中的一个   
          {   
              int   j,k=0;   
              ++xnum;   
              cout<<"No."<<xnum<<'=';   
              cout<<"{";   
              for(j=0;   j<7;   j++)   
              if(bo[j])   
              {   
                  if(k)   
                  cout<<',';   
                  cout<<str[j];   
                  ++k;   
              }   
              cout<<"}"<<endl;   
              return   0;   
          }   
          else                                                               i<7就继续下一个数   
          {   
              bo[i]=true;                                                 第i个元素放入集合中并继续   
              print(i+1);   
              bo[i]=false;                                                 第i个元素不放入集合中   
              print(i+1);   
          }   
          return   0;   
      }  
     
     int   main(   int   argc,   char   *   argv[]   )   
      {   
          print(0);   
          return   0;   
      }  
     
     
     
     
    #include <stdio.h>
    #include <string.h>
     
    #define MAX_LENGTH 100 /*集合的最大元素个数*/
     
    void PowerSet(char*, int, char*,int *);
     
    int main()
    {
        char a[MAX_LENGTH];        /*存储输入的集合*/
        char set[MAX_LENGTH]={"\0"};    /*储存集合的幂集元素*/
        int NumOfPowerSet=0;        /*幂集元素记数*/
     
        printf("Input the elements:");
        scanf("%s",a);
     
        printf("----------------------------\n");
        PowerSet(a,0,set,&NumOfPowerSet); /*调用递归函数*/
        printf("----------------------------\n");
     
        printf("Number of PowerSet: %d\n",NumOfPowerSet);
     
        return 1;
    }
     
    /*
    参数说明:             char* a :    待求幂集的集合
    int i :    当前分析到集合的第i个元素
    char* set :    存储当前幂集元素状态
    int* Num :    幂集元素记数
    */
    void PowerSet(char* a, int i, char* set, int * Num)
    {
        char TempSet[MAX_LENGTH];
     
        strcpy(TempSet,set);
        if(i>=strlen(a))
        {
            printf("{%s}\n",set);
            (*Num)++;
        }
        else
        {
            PowerSet(a,i+1,TempSet,Num);  /* 当前 *a 放到 set里 */
            strncat(TempSet,(a+i),1);     
            PowerSet(a,i+1,TempSet,Num);  /* 跳过 *a */
        }
    }
    /*
    输入测试数据:ABCD,表示集合{A,B,C,D},得到输出数据如下:Input the elements:ABCD
    -------------------------
    {}{D}{C}{CD}{B}{BD}{BC}{BCD}{A}{AD}{AC}{ACD}{AB}{ABD}{ABC}{ABCD}
    -------------------------Number of PowerSet: 16
    */


    展开全文
  • 14),输出由字母组成的一个金字塔图形编写主程序,测试该函数。 例如n = 6时,输出结果如下: _____A ____ABC ___ABCDE __ABCDEFG _ABCDEFGHI ABCDEFGHIJK (注:_为空格) 思路分析: 先设定行数和列数分别为i,j...

    题目:

    编写一个函数,其函数原型声明为“void draw(int n);”。函数功能是根据n的个数(0<n<14),输出由字母组成的一个金字塔图形,编写主程序,测试该函数。
    例如n = 6时,输出结果如下:
    _____A
    ____ABC
    ___ABCDE
    __ABCDEFG
    _ABCDEFGHI
    ABCDEFGHIJK
    (注:_为空格)

    思路分析:

    1. 先设定行数和列数分别为i,j
    2. 找出i与j和输入的n之间的关系,具体见之前写的画金字塔图形的
    3. 每输出一个字母让char类型增一再输出
    4. 每输出一行,都要重置一次char类型数位‘A’

    代码实现:

    #include<stdio.h>
    void draw(int n)
    {
    	char a = 'A', i = 1, j = 1;
    	for(i = 1; i <= n; i++)
    	{
    		a = 'A';
    		for(j = 1; j <= n - i; j++) putchar(' ');
    		for(j = 1; j <= 2 * i - 1; j++)
    		{
    			putchar(a);
    			a = a + 1;
    		} 
    	putchar('\n');
       	}
    }
    int main()
    {
    	int n = 0;
    	printf("Input the number of rows:");
    	scanf("%d",&n);
    	draw(n);
    	return 0;
    }
    

    运行结果:

    如输入7行
    在这里插入图片描述

    展开全文
  • 陈述:按上述图形输出规则,自己控制每行输出的个数和总行数。 分析: 输出以上图形,需要找出图中的规律。 把图形看成两部分进行分析,引入图片。 我们来看第部分(线条上),每行输出的个数逐步递减。 ...
  • 编写一个程序,输出以下图案

    万次阅读 2016-10-23 20:36:21
    编写一个程序,输出以下图案   *   ***  *****  *******  *********  *********** *************  ***********  *********  *******  *****   ***  * #include int
  • 编写一个函数,用于计算某长方形面积的函数。要求:函数的输入是一个长方形的长和宽,且为整数。计算并输出长宽分别为3和4的长方形的面积。(PHP编程) 编写一个PHP文件,命名为php16.php,代码如下: <?php ...
  • 编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 #include<...
  • include
  • 一个整型数n 输出 题目可能有多组不同的测试数据,对于每组输入数据, 按题目的要求输出相应的斐波那契图形。 样例输入 6 样例输出 0 0 1 1 0 1 1 2 3 0 1 1 2 3 5 8 0 1 1 2 3 5 8 13 21 0 1 1 2 3 5 8 13 ...
  • 1596: 实验9-2:编写函数打印图形 题目描述 编写void prn(int n)函数打印如下图形,定义main函数输入n,调用prn函数输出等腰三角形。 主函数如下所示,请只提供子函数的编写: #include<stdio.h> void prn...
  •  题目:编写一个"banner"函数,该函数的输入为大写字母,输出一个字符数组,该数组以图像化的方式表示该字母。 《编程珠玑》上提到当要输入的数据很多,且没有规律时,可以考虑编写一个格式信函发生器(form...
  • C语言 使用循环结构编程输出以下图形 代码: #include <stdio.h> #define n 5 void main(){ int i,j; for(i=0;i<5;i++){ for(j=0;j<=n-i-1;j++) putchar(’ ‘); for(j=0;j<=2i;j++) putchar(’’);...
  • 输入一个正整数,输出如下图形

    千次阅读 2017-09-24 15:29:50
    1、输入一个正整数,输出如下图形,例如输入5,输出图形如下: 1 22 3 3 4
  • 题目: 编写一个求菲波那奇数列的递归函数,输入n值,使用该递归函数输出如下图形。例如:当n=6时。 0 0 1 1 0 1 1 2 3 0 1 1 2 3 5 8 0 1 1 2 3...
  • -----------android培训、java培训、java学习型技术博客、期待与您交流!...下面通过三个例子总结如何使用printf函数和其它函数输出一些图形,例子出现的顺序是由简单到复杂。 示例1:输出一个如下的菱形   
  • 编写递归函数,在第行打印输出11,在第二行输出22,。。。,在第n行输出nn。 #include void print(int n) { if(n==1) printf("1\n"); else { print(n-1); for(int i=0;i;i++) printf("%d",n
  • 输出一个金字塔的图形

    千次阅读 2016-08-17 22:26:17
    输出一个金字塔的图形
  • 函数-计算图形面积

    千次阅读 2014-06-09 10:56:49
    编写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。 用虚函数分别计算几种图形面积,并求它们之和。 要求用基类指针...
  • 要求在程序中定义并调用函数PrintLine()来输出图形中的行,该行中的最大数字是m,函数原型如下: PrintLine(int m); 输入 正整数n(1≤n≤9)。 输出 指定数字图形。 样例输入 5 样例输出 1 121 12321 1234321 ...
  • C程序设计(第三版) 谭浩强习题1.5 请参照本章例题,编写一个C程序,输出以下信息:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Very good!* * * * * * * * * * * * * * * * * * * * * * * * * *...
  • 输出金字塔图形

    千次阅读 2018-10-26 22:31:09
    编写程序输出金字塔图形。 Input 输入一个正整数n。 Output 输出n层的金字塔。 #include&amp;amp;lt;stdio.h&amp;amp;gt; int main() { int i,j,n; scanf(&amp;quot;%d&amp;quot;,&...
  • C语言图形函数

    千次阅读 2016-03-02 11:33:04
    C语言图形函数() C语言图形编程(,字符屏幕) ,屏幕操作函数 1. clrscr()清除字符窗口函数 2. window()字符窗口函数 3. gotoxy()光标定位函数 4. clreol() 清除光标行尾字符函数 5. insline() ...
  • /* (程序头部注释开始) ...* 文件名称:编写一个控制台应用--输入x计算并输出分段函数F(x)的值 * 作 者: 雷恒鑫 * 完成日期: 2012 年 09 月08 日 * 版 本 号: V1.0 * 对任务及求解方法的描述部分
  • 29)编写函数,打印出n(1&lt;=n&lt;=9)行如下图形,n从键盘读入。 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 …… 题目代码 #include&lt;stdio.h&gt; int main() { int n; void prntri...
  • S-函数编写规则

    千次阅读 2019-05-08 16:37:45
    S-函数使Simulink的功能大大扩充,除Mmatlab外,用户还可以用其他语言(C/C++/FORTRAN/Ada)编写实现算法,很强大的同时也对使用者提出了较高的要求。下面是编写S-函数的整个流程: 0 基础知识 (1)Simulink仿真...
  • C++习题 虚函数-计算图形面积

    千次阅读 2014-06-03 08:38:03
    C++习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 122 Solved: 86 ...编写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle(圆形)、Square(正方形)、Rectangle(矩形)、
  • c++ 图形函数

    千次阅读 2009-08-04 11:26:00
    、屏幕操作函数 1. clrscr()清除字符窗口函数 2. window()字符窗口函数 3. gotoxy()光标定位函数 4. clreol() 清除光标行尾字符函数 5. insline() 插入空行函数 6. delline() 删除函数 7. gettext() 拷...
  • c++习题1_H_虚函数-计算图形面积

    千次阅读 2014-06-14 16:37:51
    *描述:编写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。 用虚函数分别计算几种图形面积,并求它们之和。 要求用基类...
  • Python田字格函数编写

    万次阅读 2018-11-26 13:32:23
    编写函数,并使用递归算法编写田字格代码。 def draw(n): line=3n+1 for i in range(1,line+1): if i%3 ==1: print(n&amp;amp;quot;±—&amp;amp;quot;,end=&amp;amp;quot;&amp;amp;quot;) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,935
精华内容 29,974
关键字:

编写一个函数输出以下图形