视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
归纳算法(翻硬币问题)
2025-09-30 01:45:58 责编:小OO
文档
福建工程学院计算机与信息科学系

实验报告

      2010     –   2011   学年第  一   学期  任课老师:            

实验题目归纳算法设计技术的应用实验时间实验开始日期:   2010/11/26       

报告提交日期:   2010/11/26    

实验目的、要求
一、实验题目

1、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)

2、有N个硬币(N为奇数)正面朝上排成一排,每次将N-2个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)

二、实验要求

1.该实验的课内学时是4个课时。

加强要求:

1)将1、2 题集成为一个程序,根据用户输入判断奇数还是偶数,执行相应的过程。

实验设计内容
(1)实验设计的数据结构

(1)数组

int s[1000];;

(2)层次图

(3) 各个函数分析

/***************翻硬币过程1(偶数)******************/

int Upturn_process1 (int coins_Number)

{

    int i, j;

for(i = 0; i < coins_Number; i++)

    {

        printf("Step %d:\\n",i+1);//翻转步数

        getchar();

for(j = 0; j < coins_Number; j++)

        {

         if(j != i)    

         s[j] = !s[j];//将i后面的硬币全部翻转过来

         printf("%3c", s[j]?'*':'0');//s[j]=1时为正面,打印* ,否则打印0

        }

        printf("\\n");

    }

}

/***************翻硬币过程2(奇数)******************/

int Upturn_process2 (int coins_Number)

{

    int i, j,count;

for(i = 0; i < coins_Number; i++)

    {

        printf("Step %d:\\n",i+1); //翻转步数

        getchar();

        count=0;

for(j = 0; j < coins_Number; j++)

       {

         if(j != i && j!=i+1)

         s[j] = !s[j];// 将i+1后面的硬币全部翻转过来

         printf("%3c", s[j]? '*':'0'); //s[j]=1时为正面,打印* ,否则打印0

         if(s[j]) count++;//统计正面个数

        }

        printf("\\n");

        if(count==coins_Number-2)

       {

         getchar();

         printf("Stept %d:\\n",i+2);

for(j = 0; j < coins_Number; j++)

         printf("%3c",'0');   //当正面个数等于N-2时,进行最后一次翻转

         printf("\\n");

         break;

        }

    }

}

(5)流程图                                

调试过程记录
  

for(i = 0; i < coins_Number; i++)

    {

        printf("Step %d:\\n",i+1);

        getchar();

        count=0;

        for(j = 0; j < coins_Number; j++)

       {

         if(j != i && j!=i+1)

         s[j] = !s[j];

         printf("%3c", s[j]? '*':'0');

         if(s[j]) count++;

        }

        printf("\\n");

        if(count==coins_Number-2)

       {

         getchar();

         printf("Stept %d:\\n",i+2);

for(j = 0; j < coins_Number; j++)

         printf("%3c",'0');

         printf("\\n");

         break;

        }

    }

当N为奇数时,要进行判断,当正面个数等于N-2时,经过最后一次翻转结束。刚开始没有进行判断,所以出错。

实验结果记录以及与预期结果比较以及分析

总结以及心得体会
有些问题看来很复杂,但它们是有一定规律的。只要深入细致地进行分析,找到这些规律,然后按规律编制相应的程序,问题就迎刃而解了。刚开始接触题目的时候,不知道是什么意思,后来通过直接翻转硬币找到了规律,最终也解决了问题。

指导老师评阅意见
指导老师:           年   月    日

  

    

#include

#include

#include

#include

int s[1000];/*硬币状态标志,1时硬币是正面,0时硬币是反面*/

/***************翻硬币过程1(偶数)******************/

int Upturn_process1 (int coins_Number)

{

    int i, j;

for(i = 0; i < coins_Number; i++)

    {

        printf("Step %d:\\n",i+1);

        getchar();

for(j = 0; j < coins_Number; j++)

        {

         if(j != i)

         s[j] = !s[j];

         printf("%3c", s[j]?'*':'0');

        }

        printf("\\n");

    }

}

/***************翻硬币过程2(奇数)******************/

int Upturn_process2 (int coins_Number)

{

    int i, j,count;

for(i = 0; i < coins_Number; i++)

    {

        printf("Step %d:\\n",i+1);

        getchar();

        count=0;

for(j = 0; j < coins_Number; j++)

       {

         if(j != i && j!=i+1)

         s[j] = !s[j];

         printf("%3c", s[j]? '*':'0');

         if(s[j]) count++;

        }

        printf("\\n");

        if(count==coins_Number-2)

       {

         getchar();

         printf("Stept %d:\\n",i+2);

for(j = 0; j < coins_Number; j++)

         printf("%3c",'0');

         printf("\\n");

         break;

        }

    }

}

int main()

{

    int coins_Number;

    int j;

    printf("请输入硬币的个数:\\n");

    scanf("%d",&coins_Number);

    printf("初始状态:\\n");

for(j = 0; j < coins_Number; j++)

    {

        s[j] = 1;                //所有硬币初始状态设置,设置正面向上

        printf("%3c", '*');

    }

    printf("\\n\\n");

    if (coins_Number%2==0)

       Upturn_process1 (coins_Number);

    else

       Upturn_process2 (coins_Number);

}下载本文

显示全文
专题