DAY 17 蓝桥杯 算法训练 反置数 乘法表 寂寞的数 递归求二项式系数值 学做菜(今天搞点简单的,明天继续深广搜)

试题 算法训练 反置数

资源限制
时间限制:1.0s 内存限制:512.0MB

问题描述:
  一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如说,1245的反置数是5421,而1200的反置数是21。请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来。要求:由于在本题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式。
  输入格式:输入只有一行,包括两个整数,中间用空格隔开。
  输出格式:输出只有一行,即相应的结果。
  输入输出样例:
样例输入:
435 754
样例输出:
199

注意:

这个小题出现了字符串与整形数转换的函数。
头文件include"cstdlib"
atoi:int a=atoi(char*c) 把字符串换成整形数
itoa: itoa(a,b,m) a表示要转化成字符串的数,b表示收集数据的数组指针,m表示的是进制。

code:

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int main()
{
	char a[100], b[100],c[100],d[100],f[100],l[100];
	long long h, g;
	cin >> a >> b;
	int i,n,m,k;
	n = strlen(a);
	m = strlen(b);
	for (i = n - 1; i >= 0; i--)
			c[n-i-1] = a[i];
	for (i = n - 1; i >= 0; i--)
		d[n - i - 1] = b[i];
	h = atoi(c);
	g = atoi(d);
	int sum = h + g,sum2;
	itoa(sum, f, 10);
	k = strlen(f);
	for (i = k - 1; i >= 0; i--)
		l[k - i - 1] = f[i];
	sum2 = atoi(l);
	cout <<sum2<< endl;
	return 0;
}

试题 算法训练 乘法表

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  输出九九乘法表。
输出格式
  输出格式见下面的样例。乘号用“”表示。
样例输出
下面给出输出的前几行:
1
1=1
21=2 22=4
31=3 32=6 33=9
4
1=4 42=8 43=12 4*4=16
……

没得说,太简单,直接上代码:

#include<iostream>
using namespace std;
int main()
{
	int i,j;
	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= i; j++)
		{
			cout << i<<"*"<<j << "=" << i*j<<" ";
		}
		cout << endl;
	}
	return 0;
}

试题 算法训练 寂寞的数

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  道德经曰:一生二,二生三,三生万物。
  对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如,d(23)=23+2+3=28, d(1481)=1481+1+4+8+1=1495。
  因此,给定了任意一个n作为起点,你可以构造如下一个递增序列:n,d(n),d(d(n)),d(d(d(n)))…例如,从33开始的递增序列为:
  33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, …
  我们把n叫做d(n)的生成元,在上面的数列中,33是39的生成元,39是51的生成元,等等。有一些数字甚至可以有两个生成元,比如101,可以由91和100生成。但也有一些数字没有任何生成元,如42。我们把这样的数字称为寂寞的数字。
输入格式
  一行,一个正整数n。
输出格式
  按照升序输出小于n的所有寂寞的数字,每行一个。
样例输入
40
样例输出
1
3
5
7
9
20
31
数据规模和约定
  n<=10000

code:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,k,sum,i,a[100000];
	cin >> n;
	memset(a, 0, sizeof(a));
	for (i = 1; i <= n; i++)
	{
		k = i;
		sum = k;
		while(k)
		{
			sum += k % 10;
			k /= 10;
		}
		a[sum] = 1;//标记
	}
	for (i = 1; i <= n; i++)
		if (a[i]==0)
			cout << i << endl;
	return 0;
}

试题 算法训练 6-1 递归求二项式系数值

资源限制
时间限制:10.0s 内存限制:256.0MB
问题描述
在这里插入图片描述
样例输入
一个满足题目要求的输入范例。
3 10
样例输出
在这里插入图片描述
与上面的样例输入对应的输出。

数据规模和约定
  输入数据中每一个数的范围。
  例:结果在int表示时不会溢出。

超简单递归,没的说:

#include<stdio.h>
int sx(int x, int y)
{
	if (y == 0 || y == x)
		return 1;
	
	return sx(x - 1, y) + sx(x - 1, y - 1);
	
}
int main()
{
	int n, k,sum;
	scanf("%d%d",&k,&n);
	sum=sx(n, k);
	printf("%d",sum);
	return 0;
}

试题 算法训练 学做菜

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  涛涛立志要做新好青年,他最近在学做菜。由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上字母A,B,C,D。
  涛涛现在会做的菜有五种:
  1、 西红柿炒鸡蛋 原料:AABDD
  2、 酸辣鸡丁 原料:ABCD
  3、 宫保鸡丁 原料:CCD
  4、 水煮西红柿 原料:BBB
  5、 怪味蛋 原料:AD
  这天早上,开开去早市给涛涛买了一些原料回来。由于事先没有什么计划,涛涛决定,对于现存的原料,每次尽量做菜单上靠前(即编号小)的菜。
  现在请你写一个程序,判断一下开开和涛涛中午能吃到哪些菜。
输入格式
  共4个整数a,b,c,d。分别表示开开买的A,B,C,D这4种原料的数量。每种原料不会超过30份。
输出格式
  输出5行。其中第i行表示涛涛做的第i种菜的数目。
样例输入
3
1
2
4
样例输出
1
0
1
0
1

我的解法是最暴力的,如果有哪位大哥知道简单一点的解法请务必留言,拜托了!

code:

#include<stdio.h>
void one(int a[])
{
	int i = 0;
	while (a[0] >= 2 && a[1] >= 1 && a[3] >= 2)
	{
		i++;
		a[0] -= 2;
		a[1] -= 1;
		a[3] -= 2;
	}
	printf("%d\n", i);
}
void two(int a[])
{
	int i = 0;
	while (a[0] >= 1 && a[1] >= 1 && a[2] >= 1 && a[3] >= 1)
	{
		i++;
		a[0] -= 1;
		a[1] -= 1;
		a[2] -= 1;
		a[3] -= 1;
	}
	printf("%d\n", i);
}
void three(int a[])
{
	int i = 0;
	while (a[2] >= 2 && a[3] >= 1)
	{
		i++;
		a[2] -= 2;
		a[3] -= 1;
	}
	printf("%d\n", i);
}
void four(int a[])
{
	int i = 0;
	while (a[1] >= 3)
	{
		i++;
		a[1] -= 3;
	}
	printf("%d\n", i);
}
void five(int a[])
{
	int i = 0;
	while (a[0] >= 1 && a[3] >= 1)
	{
		i++;
		a[0] -= 1;
		a[3] -= 1;
	}
	printf("%d\n", i);
}
int main()
{
	int a[4];
	int i;
	for (i = 0; i<4; i++)
		scanf("%d", &a[i]);
	one(a);
	two(a);
	three(a);
	four(a);
	five(a);
	return 0;
}

发布了22 篇原创文章 · 获赞 8 · 访问量 1490

猜你喜欢

转载自blog.csdn.net/OWCYKH/article/details/104307348
今日推荐