是简单程序吖

在对c语言有了初步了解之后,相信大家都遇到过汉诺塔等问题的求解,今天带大家看看她的真面目。

一、投骰子

描述:每次点数都是1到6的一个随机数;为了分出每盘的胜负,必须把两个人骰子点数的累加值分别记录下来;为了分出整体的胜负,必须把两人胜利的盘数分别记录下来。
分析:
(1)引入需要用到的三个头文件;
(2)在主函数中,调用srand()函数设计随机数种子;
(3)外层循环实现50盘游戏中两人胜负盘数的累积,内层循环计算每人每盘掷出的随机点数;
(4)循环结束后得到最终结果,经过比较分出胜负并输出结果到屏幕上。
代码实现:

#include <stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    srand((unsigned int)time(NULL));
    int d1, d2, c1, c2, i, j;
    c1 = c2 = 0;
    for (i = 1; i <= 50; i++)
    {
        d1 = d2 = 0;
        for (j = 1; j <= 6; j++)
        {
            d1 = d1 + rand() % 6 + 1;
            d2 = d2 + rand() % 6 + 1;
        }
        if (d1 > d2)
            c1++;
        else if (d1 < d2)
            c2++;
    }
    if (c1 > c2)
    {
        printf("\nThe frist win.");
    }
    else
    {
        if (c1 < c2)
            printf("\nThe second win.");
        else
            printf("\nThey tie.");
    }
    return 0;
}

运行截图:在这里插入图片描述

二、自守数

描述:如果某个数的平方的末尾几位等于该数本身,那么就称这个数为自守数。
分析:
(1)用for循环遍历1~10000的所有整数;
(2)求出当前循环中此数的平方和此数的位数;
(3)通过对此数的平方取余求出此数的尾数;
(4)判断尾数是否和此数相等,如果相等则为自守数,将此数输出到屏幕上。
代码实现:

#include<stdio.h>
#include<math.h>
int main()
{
 int i, a, k, m;
 for (i = 1; i < 10000; i++)
 {
  a = i;
  a *= a;
  k = log10(i) + 1;
  for (m = 1; k; k--)
   m *= 10;
  a %= m;
  if (a == i)
   printf("%d\n", i);
 }
 return 0;
}

运行截图:
在这里插入图片描述

三、汉诺塔

描述:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
代码实现:

#include<stdio.h>
int getNum(int n)
{
 if (n == 1)
  return 1;
 else
  return 2 * getNum(n - 1) + 1;
 return 0;
}int main()
{
 int n = 10, num;//n的值可以修改
 num = getNum(n);
 printf("汉诺塔中%d片圆盘共需移动%d次\n", n, num);
 return 0;
}

运行截图:在这里插入图片描述

四、回文素数

描述:一个整数i从左向右读与从右向左读都是相同的数,且i为素数,则称其为回文素数。(素数指只能由1和它本身整除的整数)
分析:
(1)先采用穷举法对1000以内的整数进行遍历,判断其是否为素数;
(2)如果此数为素数,则继续判断此数是两位数还是三位数;
(3)如果为两位数,则判断其十为和个位是否相同,如果相同则说明此数为回文素数;如果是三位数,则判断其百位和个位是否相同,如果相同则说明此数为回文素数;
(4)最后将所有少于1000的回文素数打印输出到屏幕上即可。
代码实现:

#include <stdio.h>
int main()
{
 int flag;
 int n;
 int i;
 for (n = 10; n < 1000; n++)
 {
  for (i = 2; i < n; i++)
  {
   flag = 1;
   if (n % i == 0)
   {
    flag = 0;
    break;
   }
  }
  if (flag == 1)
  {
   if (n / 100 == 0)
   {
    if (n / 10 == n % 10)
    {
     printf("%4d", n);
    }
   }
   else
   {
    if (n / 100 == n % 10)
    {
     printf("%4d", n);
    }
   }
  }
 }
 printf("\n");
 return 0;
}

运行截图:
在这里插入图片描述

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值