簡單程式
- 一、投骰子
- 二、自守數
- 三、漢諾塔
- 四、回文素數
在對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;
}
運行截圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287733.html
標籤:其他
