菜鸟之路【计算导论与C基础】练习1 计算概论第五周 B-04作业

这是修改稿~记录一下在学习当中遇见的一些解法以及思路,本篇均在VS2013编译条件下进行了测试;单未进行黑盒测试,可能在一些解法上存在问题,在刷完题后会对本篇进行校正~前述未完成作业也将会补上^_^

在此也感谢一下那些提供思路的程序员及方法~

编程题#3:描述

用户输入N和K,然后接着输入N个正整数(无序的),
程序在不对N个整数排序的情况下,找出第K大的数。
注意,第K大的数意味着从大到小排在第K位的数。

输入
N
K
a1 a2 a3 a4 ..... aN

输出
b

样例输入
5
2
32 3 12 5 89
样例输出

32

提示
这是一道很经典的算法问题,是公司面试的常见考题。

以后学习递归之后再回头看看这道题,或许有新解法。

参考解法贴上

#include<iostream>
using namespace std;
int main()
{
	int a[100];
	int N, K;
	cin >> N >> K;
	for (int i = 0; i < N; i++)
	{
		cin >> a[i];//初始化数组
	}
	for (int i = 0; i < N; i++)
	{
		int num = 0;
		for (int j = 0; j < N; j++)
		{
			if (a[i] < a[j])num++;
		}
		if (K - 1 == num)
			cout << a[i] << endl;
	}
	return 0;
}
递归方法
#include<iostream>
using namespace std;
int num[100] = { 0 };//定义100个元素的数组,输入N个正整数,找出第K大的数
int Big(int K, int N)
{
	int tmp = 0;
	if (K == 1)
	{
		for (int i = 0; i < N; i++)
		{
			if (num[i] > tmp)
				tmp = num[i];
		}
	}
	else
	{
		for (int i = 0; i < N; i++)

		if ((num[i]>tmp) && (Big(K - 1, N)>num[i]))
		{
			tmp = num[i];
		}
	}
	return tmp;
}
int main()
{
	int N, K;
	cin >> N >> K;//输入N个正整数,找出第K大的数
	for (int i = 0; i < N; i++)
	{
		cin >> num[i];
	}
	cout << Big(K, N) << endl;
	return 0;
}

 编程题#4:人民币支付描述从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票。输入一个小于1000的正整数。输出输出分行,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数样例输入735样例输出701110 

解法1,太笨了这方法

#include<iostream>
using namespace std;
int main()
{
	int sum;
	int a[6] = {0};//a[0]:100,a[1]:50,a[2]:20,a[3]:10,a[4]:5,a[5]:1;
	cin >> sum;
	a[0] = sum / 100;
	a[1] = (sum - a[0] * 100) / 50;
	a[2] = (sum - a[0] * 100 - a[1] * 50) / 20;
	a[3] = (sum - a[0] * 100 - a[1] * 50 - a[2] * 20) / 10;
	a[4] = (sum - a[0] * 100 - a[1] * 50 - a[2] * 20 - a[3] * 10) / 5;
	a[5] = (sum - a[0] * 100 - a[1] * 50 - a[2] * 20 - a[3] * 10 - a[4] * 5);
	for (int i = 0; i < 6; i++)
	{
		cout << a[i] << endl;
	}
	return 0;
}
解法二,本来是用取余,结果发现可以用循环来做

#include<iostream>
using namespace std;
int main()
{
	int sum;
	int a[6] = { 0 };//a[0]:100,a[1]:50,a[2]:20,a[3]:10,a[4]:5,a[5]:1;
	cin >> sum;
	int piao[6] = {100,50,20,10,5,1};
	for (int i = 0; i < 6; i++)
	{
		a[i] = sum / piao[i];
		sum = sum % piao[i];
		cout << a[i] << endl;
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值