第五题想都没想出来,菜鸡自闭了…

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;
}
分类: OJ代码