C语言穷举法求500里面50 20 10 5 的个数
时间: 2023-11-27 18:54:29 浏览: 72
题目描述:有500元钱,现在要用50元、20元、10元、5元这四种面值的纸币凑出来,请问有多少种不同的组合方法?
解题思路:这道题可以使用穷举法,枚举四种面值的纸币的个数,如果加起来正好等于500元,则方案数加一。
下面是 C 语言的代码实现:
```c
#include <stdio.h>
int main() {
int count = 0; // 方案数
for (int i = 0; i <= 500/50; i++) {
for (int j = 0; j <= 500/20; j++) {
for (int k = 0; k <= 500/10; k++) {
for (int l = 0; l <= 500/5; l++) {
if (i*50 + j*20 + k*10 + l*5 == 500) {
count++;
}
}
}
}
}
printf("共有%d种不同的组合方法\n", count);
return 0;
}
```
输出结果为:共有11156种不同的组合方法。
相关问题
给定一个整数数组A=(a0,a1,…,an-1),若i<j且ai>aj,则<ai,aj>就为一个逆序对,例如数组(3,1,4,5,2)的逆序对有<3,1>,<3,2>,<4,2>,<5,2>。设计一个穷举算法求A中的逆序对的个数。用C语言写代码,用分治法
#include <stdio.h>
// 归并排序求逆序对
int merge(int a[], int tmp[], int l, int m, int r) {
int i = l, j = m + 1, k = l;
int count = 0;
while (i <= m && j <= r) {
if (a[i] <= a[j]) {
tmp[k++] = a[i++];
} else {
count += m - i + 1; // 统计逆序对个数
tmp[k++] = a[j++];
}
}
while (i <= m) {
tmp[k++] = a[i++];
}
while (j <= r) {
tmp[k++] = a[j++];
}
for (i = l; i <= r; i++) {
a[i] = tmp[i];
}
return count;
}
// 分治求逆序对
int mergeSort(int a[], int tmp[], int l, int r) {
int count = 0;
if (l < r) {
int m = (l + r) / 2;
count += mergeSort(a, tmp, l, m);
count += mergeSort(a, tmp, m + 1, r);
count += merge(a, tmp, l, m, r);
}
return count;
}
int main() {
int a[] = {3, 1, 4, 5, 2};
int tmp[5];
int count = mergeSort(a, tmp, 0, 4);
printf("逆序对个数:%d\n", count);
return 0;
}
c语言用蛮力法求a[0]-a[1]-...-a[n-1]
在C语言中,如果你想要通过蛮力法(也称为暴力搜索或穷举法)求解数组`a[0] - a[1] - ... - a[n-1]`的总和,你可以遍历整个数组并逐个相减。以下是简单的示例代码:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入数组元素的个数:");
scanf("%d", &n);
// 假设数组a有足够大的内存空间存放整数
int a[n];
printf("请输入数组的元素:");
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int sum = a[0]; // 初始化sum为第一个元素
for (int i = 1; i < n; i++) { // 遍历从第二个元素开始
sum -= a[i]; // 每次循环都从sum中减去当前元素
}
printf("数组元素之和减去自身后的结果是:%d\n", sum);
return 0;
}
```
在这个程序中,我们首先读取数组的长度`n`和每个元素值,然后计算`a[0]`减去所有后续元素直到`a[n-1]`的差值。
阅读全文