概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- Top1
- 乘法口诀数列
- Top2
- 试试手气(丢骰子)
Top1
乘法口诀数列
本题要求你从任意给定的两个1位数字 a1和 a 2开始,用乘法口诀生成一个数列{an},规则从 a1开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是1位数,则其每一位都应成为数列的一项。
输入格式:
输入在一行中给出3个整数,依次为 a1 、a 2和 n,满足0≤a1,a2≤9,0<n≤10^3。
思路
用数组保存乘出来的数,十位放在个位的前头,注意所得的下标移动
#include <stdio.h>
int main()
{ int ge,shi,i; //ge保存两个数相乘所得的个位,shi保存两个数相乘所得的十位
int n,m,k,count = 2;
int place1=0,place2=1; //place1和place2分别记录两个数要相乘数组下标的移动位置
scanf("%d%d%d",&n,&m,&k);
int time =k; //先保存要输出的数列的深度
int a[10000]={n,m}; //创建数据存放数据;
while(k)
{
int x = a[place1]*a[place2];
//将两数相乘结果分为[0,9] 和 [10,81] 讨论
if(x<=9) {
a[count] = x;
count++;
} else {
ge = x%10;
shi =x/10%10;
a[count] = shi; //先将十位放数组里
a[count+1] = ge; //个位放十位后头
count+=2; //下次放数据的下标则移动到十位的后面
}
place1++; //乘数1的位置移动到乘数2的位置
place2++; //乘数2的位置移动的后一位
k--;
}
for(i=0;i<time;i++)
{
printf("%d",a[i]);
if(i<time-1) printf(" ");
}
return 0;
}
Top2
试试手气(丢骰子)
我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:
1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。
那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。
输入格式:
输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。
输出格式:
在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int N=6,n,i;
int a[7]={0},b[7];
for(i=1;i<7;i++)
{
scanf("%d",&a[i]);
b[i] = a[i]; //b[i]为对照的数组,统计第一次输入的骰子点数
}
scanf("%d",&n);
//先将第一次摇预设出来为最大值6,加入初态为6,则第一次为5,方便后面统计
for(i=1;i<7;i++)
{
if(a[i]==6) a[i]-=1; //如果初始状态为最大点数,则其第一次结果为5
else a[i]=6; //否则第一次为6
}
int k=n; //临时保存要摇的次数
for(i=1;i<7;i++) //循环输出6个骰子面
{
while(n-1) //因为第一次在上面遍历过了,所以每个骰子摇的次数-1
{
a[i]-=1; //当前的骰子面先-1
if(a[i]==b[i]) { //看是否会等于初始状态的点数,如果相等,就-1
a[i]-=1;
}
n--;
}
n=k;
printf("%d",a[i]);
if(i<6) printf(" ");
}
return 0;
}
最后
以上就是调皮胡萝卜为你收集整理的【无标题】PTA,乘法口诀数列乘法口诀数列试试手气(丢骰子)的全部内容,希望文章能够帮你解决【无标题】PTA,乘法口诀数列乘法口诀数列试试手气(丢骰子)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复