从箭牌上输入a与n,计算a+aa+aaa+……(共n项)
时间: 2023-05-11 12:01:56 浏览: 45
这是一个简单的数学问题,可以使用循环来解决。以下是一个示例代码:
```
#include <stdio.h>
int main() {
int a, n, i, sum = 0, term = 0;
printf("请输入a和n的值:");
scanf("%d %d", &a, &n);
for (i = 1; i <= n; i++) {
term = term * 10 + a;
sum += term;
}
printf("结果为:%d\n", sum);
return 0;
}
```
这个程序会提示用户输入a和n的值,然后使用循环计算出a aa aaa ……(共n项)的和,并输出结果。
相关问题
用python写一个麻将游戏
好的,这是一个麻将游戏的代码示例,使用Python语言编写:
```python
import random
# 麻将牌总数
MAHJONG_COUNT = 144
# 麻将牌的种类
MAHJONG_KINDS = ["万", "条", "饼", "风", "箭"]
# 麻将牌的数字
MAHJONG_NUMS = ["一", "二", "三", "四", "五", "六", "七", "八", "九"]
# 风牌的种类
MAHJONG_FENG_KINDS = ["东", "南", "西", "北"]
# 箭牌的种类
MAHJONG_JIAN_KINDS = ["中", "发", "白"]
# 玩家初始手牌数量
INIT_HAND_COUNT = 13
# 麻将牌的类
class Mahjong:
def __init__(self, kind, num):
self.kind = kind
self.num = num
def __str__(self):
return self.num + self.kind
# 麻将牌堆的类
class MahjongHeap:
def __init__(self):
self.heap = []
self.init_heap()
self.shuffle()
# 初始化麻将牌堆
def init_heap(self):
for kind in MAHJONG_KINDS:
if kind == "风":
for feng in MAHJONG_FENG_KINDS:
for i in range(4):
self.heap.append(Mahjong(feng, ""))
elif kind == "箭":
for jian in MAHJONG_JIAN_KINDS:
for i in range(4):
self.heap.append(Mahjong(jian, ""))
else:
for num in MAHJONG_NUMS:
for i in range(4):
self.heap.append(Mahjong(kind, num))
# 洗牌
def shuffle(self):
random.shuffle(self.heap)
# 摸牌
def draw(self):
if len(self.heap) > 0:
return self.heap.pop()
else:
return None
# 玩家类
class Player:
def __init__(self, name):
self.name = name
self.hand = []
# 摸牌
def draw(self, mahjong):
self.hand.append(mahjong)
# 打牌
def discard(self, index):
if index >= 0 and index < len(self.hand):
return self.hand.pop(index)
else:
return None
# 显示手牌
def show_hand(self):
print(self.name + "的手牌:")
for i, mahjong in enumerate(self.hand):
print(str(i+1) + ": " + str(mahjong))
# 游戏类
class Game:
def __init__(self):
self.players = []
self.mahjong_heap = MahjongHeap()
# 添加玩家
def add_player(self, player):
self.players.append(player)
# 开始游戏
def start(self):
# 发牌
for i in range(INIT_HAND_COUNT):
for player in self.players:
player.draw(self.mahjong_heap.draw())
# 显示玩家手牌
for player in self.players:
player.show_hand()
# 主循环
while True:
for player in self.players:
# 玩家摸牌
mahjong = self.mahjong_heap.draw()
player.draw(mahjong)
print(player.name + "摸了一张牌:" + str(mahjong))
# 显示玩家手牌
player.show_hand()
# 玩家打牌
while True:
index = input(player.name + "打哪张牌?")
if index.isdigit():
index = int(index) - 1
mahjong = player.discard(index)
if mahjong is not None:
print(player.name + "打出了:" + str(mahjong))
break
else:
print("无效的牌号!")
else:
print("无效的输入!")
# 判断是否有人胡牌、和牌、杠牌、碰牌等等
# 判断是否有人胡牌
# 判断是否有人和牌
# 判断是否有人杠牌
# 判断是否有人碰牌
# 判断是否流局
# 结束游戏
def end(self):
pass
# 测试代码
if __name__ == "__main__":
game = Game()
game.add_player(Player("张三"))
game.add_player(Player("李四"))
game.add_player(Player("王五"))
game.start()
game.end()
```
python麻将完整算法
麻将算法是一个比较复杂的问题,需要考虑到很多因素,比如牌型、牌风、牌的顺序、听牌、打法等等。以下是一个简单的 Python 麻将算法:
1. 初始化牌库
首先,我们需要定义一副牌,并随机洗牌。假设我们使用的是国标麻将,一副牌包括 136 张牌,分为万、条、饼、东西南北中发白七种花色。每种花色有 1 到 9 张牌,风牌和箭牌各有 4 张牌。我们可以使用一个数组来表示一副完整的牌:
```python
pai = ['1万', '2万', ..., '9饼', '东', '南', '西', '北', '中', '发', '白',
'1万', '2万', ..., '9饼', '东', '南', '西', '北', '中', '发', '白',
'1万', '2万', ..., '9饼', '东', '南', '西', '北', '中', '发', '白',
'1万', '2万', ..., '9饼', '东', '南', '西', '北', '中', '发', '白']
```
然后,我们使用 Python 的 random 库来进行洗牌:
```python
import random
random.shuffle(pai)
```
2. 定义玩家手牌
我们可以定义一个列表来表示玩家的手牌,根据麻将规则,每个玩家初始有 13 张牌:
```python
player_hand = pai[0:13]
```
3. 判断是否可以和牌
和牌是指玩家手牌中满足和牌条件的情况,包括听牌和自摸两种情况。听牌是指玩家手牌中只差一张牌就可以和牌的情况,而自摸是指玩家摸到了一张可以和牌的牌。
判断是否可以和牌需要考虑很多因素,包括和牌方式、牌型、牌风、打法等等。这里只给出一个简单的判断方式:
```python
def can_hu(player_hand):
"""
判断玩家手牌是否可以和牌。
"""
# 首先判断是否可以自摸
for pai in pai_list:
if check_hu(player_hand + [pai]):
return True
# 如果不能自摸,则判断是否可以听牌
for pai in player_hand:
tmp_hand = player_hand.copy()
tmp_hand.remove(pai)
for pai2 in pai_list:
if check_hu(tmp_hand + [pai2]):
return True
return False
```
其中,check_hu 函数用于判断一副牌是否可以和牌,这里不再赘述。
4. 判断是否可以杠牌
杠牌是指玩家手牌中有四张相同的牌或者三张相同的牌加上一张指定的牌。判断是否可以杠牌也需要考虑很多因素,包括明杠和暗杠、杠后摸牌和杠后不摸牌等等。这里只给出一个简单的判断方式:
```python
def can_gang(player_hand, pai):
"""
判断玩家手牌中是否可以杠牌。
"""
if player_hand.count(pai) == 3:
return 'an_gang' # 暗杠
elif player_hand.count(pai) == 4:
return 'ming_gang' # 明杠
else:
return False
```
其中,pai 是要杠的牌。
5. 判断是否可以碰牌
碰牌是指玩家手牌中有两张相同的牌,再加上一张由其他玩家打出的指定牌。判断是否可以碰牌也比较简单:
```python
def can_peng(player_hand, pai):
"""
判断玩家手牌中是否可以碰牌。
"""
if player_hand.count(pai) >= 2:
return True
else:
return False
```
其中,pai 是由其他玩家打出的牌。
以上只是一个简单的麻将算法,实际应用中需要考虑更多的因素。如果您需要更详细的算法实现,可以参考一些开源的麻将游戏项目,比如 MahjongAI 和 Mjolnir。