最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

归纳算法(翻硬币问题)

来源:动视网 责编:小OO 时间:2025-09-30 01:45:58
文档

归纳算法(翻硬币问题)

福建工程学院计算机与信息科学系实验报告2010–2011学年第一学期任课老师:实验题目归纳算法设计技术的应用实验时间实验开始日期:2010/11/26报告提交日期:2010/11/26实验目的、要求一、实验题目1、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)2、有N个硬币(N为奇数)正面朝上排成一排,每次将N-2个硬币翻过来放在原位置
推荐度:
导读福建工程学院计算机与信息科学系实验报告2010–2011学年第一学期任课老师:实验题目归纳算法设计技术的应用实验时间实验开始日期:2010/11/26报告提交日期:2010/11/26实验目的、要求一、实验题目1、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)2、有N个硬币(N为奇数)正面朝上排成一排,每次将N-2个硬币翻过来放在原位置
福建工程学院计算机与信息科学系

实验报告

      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);

}

文档

归纳算法(翻硬币问题)

福建工程学院计算机与信息科学系实验报告2010–2011学年第一学期任课老师:实验题目归纳算法设计技术的应用实验时间实验开始日期:2010/11/26报告提交日期:2010/11/26实验目的、要求一、实验题目1、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)2、有N个硬币(N为奇数)正面朝上排成一排,每次将N-2个硬币翻过来放在原位置
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top