这是修改稿~记录一下在学习当中遇见的一些解法以及思路,本篇均在VS2013编译条件下进行了测试;单未进行黑盒测试,可能在一些解法上存在问题,在刷完题后会对本篇进行校正~前述未完成作业也将会补上^_^
在此也感谢一下那些提供思路的程序员及方法~
编程题#3:描述
用户输入N和K,然后接着输入N个正整数(无序的),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; }
解法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; }