第五题想都没想出来,菜鸡自闭了…
A. 递归求解之阿尔法乘积
#include <stdio.h>
#include <stdlib.h>
long long int count(long long int x);
int judge(long long int x);
int main() //main函数
{
long long int x; //定义整数x
scanf("%lld", &x); //读入整数x
printf("%lld", count(x)); //计算并输出结果
return 0; //表示main函数正常运行
}
int judge(long long int x) //判断x是否为一个个位数
{
if (x / 10 == 0)
{
return 1; //是个位数
}
else
{
return 0; //不是
}
}
long long int count(long long int x) //计算的函数
{
if (judge(x)) //判断xsbs个位数
{
return x; //返回x
}
else
{
long long int sum = 1;
while (x != 0) //计算非零位的乘积
{
if (x % 10 != 0)
{
sum = sum * (x % 10);
}
x = x / 10;
}
return count(sum); //迭代
}
}
B. 贴邮票三
#include <stdio.h>
#include <stdlib.h>
int count(int m, int n);
void mysort(int a[], int n);
int main() //main函数
{
int m, n; //定义n, m
scanf("%d %d", &m, &n); //读入n和m
printf("%d", count(m, n)); //计算并输出结果
return 0; //表示main函数正常运行
}
int count(int m, int n) //计算函数
{
int a[100]; //定义长度为100的数组存放邮票面额
int i;
for (i = 0; i < n; i++) //输入并储存邮票面额
{
scanf("%d", &a[i]);
}
mysort(a, n); //对面额排序
int sum = 0; //初始化总金额
int num = 0; //初始化张数
for (i = 0; sum < m; i++) //计算所需张数
{
sum = sum + a[i];
num++;
}
return num; //返回值
}
void mysort(int a[], int n) //排序函数
{
int i, j;
for (i = 0; i < n; i++) //选择排序
{
int max = a[i];
int place = i;
for (j = i; j < n; j++)
{
if (a[j] > max)
{
max = a[j];
place = j;
}
}
a[place] = a[i];
a[i] = max;
}
}
C. 打印方阵一
#include <stdio.h>
#include <stdlib.h>
void printarray(int n);
void print(int x[][100], int n);
int main() //main函数
{
int n; //定义n
scanf("%d", &n); //读入n
printarray(n); //输出方阵
return 0; //表示main函数正常运行
}
void printarray(int n)
{
int x[100][100] = {0}; //定义并初始化方阵
int i, j;
int all = 1; //定义输入到第几个数
for (i = 0; i < n; i++) //生成方阵
{
for (j = 0; j <= i; j++) //向右生成
{
x[i][j] = all++;
}
for (j = i - 1; j >= 0; j--) //向上生成
{
x[j][i] = all++;
}
}
print(x, n); //输出方阵
}
void print(int x[][100], int n) //输出方阵
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", x[i][j]);
}
printf("\n");
}
}
D. 大牌点一
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void count(int n);
int countpoint(char x);
int main() //main函数
{
int n;
scanf("%d", &n); //输入个数
count(n); //计算并输出
return 0; //表示main函数正常运行
}
void count(int n)
{
char x[n][30]; //定义二位数组
int i, j;
for (i = 0; i < n; i++) //扫描保存字符串
{
scanf("%s", x[i]);
}
int sum[100] = {0};
for (i = 0; i < n; i++) //计算点数
{
for (j = 0; x[i][j] != '\0'; j++)
{
sum[i] = sum[i] + countpoint(x[i][j]);
}
}
for (i = 0; i < n; i++) //冒泡排序
{
for (j = n - 1; j > i; j--)
{
if (sum[j] > sum[j - 1])
{
int tmp = sum[j];
sum[j] = sum[j - 1];
sum[j - 1] = tmp;
char tmp1[30];
strcpy(tmp1, x[j]);
strcpy(x[j], x[j - 1]);
strcpy(x[j - 1], tmp1);
}
}
}
for (i = 0; i < n; i++) //输出字符串
{
puts(x[i]);
}
}
int countpoint(char x) //计算点数
{
int point;
if (x == '3' || x == '4' || x == '5')
{
point = 1;
}
else if (x == '6' || x == '7' || x == '8')
{
point = 2;
}
else if (x =='9' || x == 'T')
{
point = 3;
}
else if (x == 'J')
{
point = 4;
}
else if (x == 'Q')
{
point = 5;
}
else if (x == 'K')
{
point = 6;
}
else if (x == 'A')
{
point = 8;
}
else if (x == '2')
{
point = 10;
}
else if (x == 'B')
{
point = 15;
}
else
{
point = 20;
}
return point;
}