供参考:
#include<stdio.h>
int main()
{
int M[6]={100,50,20,10,5,1},c_M[6]={0},n,m,i,s=0;
scanf("%d",&n);
while(n--){
scanf("%d",&m);
s += m;
for(i=0;m!=0;i++){
c_M[i] += m/M[i];
m %= M[i];
}
}
printf("%d\n%d %d %d %d %d %d",s,c_M[0],c_M[1],
c_M[2],c_M[3],c_M[4],c_M[5]);
return 0;
}
//3
//1200 1341 1567
//4108
//40 1 2 1 1 3请按任意键继续. . .
照片有点看不清啊😂特别是那个input和output
4108=40乘100+50乘1+20乘2+10乘1+5乘1+1乘3,后面两行没有看清,不清楚到底要问啥😂😂(星号打出来了没显示出来,只好用汉字写了)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, s;
int *salary;
scanf("%d",&n);
salary = (int*)malloc( n*sizeof(int) );
s = 0;
for(i=0; i<n; i++){
scanf("%d",&salary[i]);
s = s + salary[i];
}
printf("%d\n",s);
printf("%d ",s/100); s = s%100;
printf("%d ",s/50); s = s%50;
printf("%d ",s/20); s = s%20;
printf("%d ",s/10); s = s%10;
printf("%d ",s/5); s = s%5;
printf("%d ",s);
return 0;
}
4108除以100取整输出,余数除以50,以此类推,再加个判断函数,如果输出数为零,返回上一级,输出数减一,重新算一下余数,可以考虑一下用递归,普通函数也可以
每个人的工资单独求余计算最少人民币张数
每个面值单独变量初始化为0求一次变量加一次
这个分匀的要求应该是保证每个面额>=1吧,那可以先每个面额分一次,剩下的再重新分配啊。
比如4108
每个面额先分一次就剩
4108-186=3922
3922/100=39......22
22/50=0......22
22/20=1.....2
2/10=0......2
2/5=0.......2
2/1=2.....0
求出来结果是:39、0、1、0、0、2
再加上之前分配有的1
就是:40,1,2,1,1,3
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n];
for(int a=0;a<n;a++)
{
cin>>arr[a];
};//输入人数和工资数。
int t=0;
for(int a=0;a<n;a++)
{
t+=arr[a];
}
cout<<t<<endl;//这一步是求所有人的工资和。
int u=0;
for(int a=0;a<n;a++)
{
u+=arr[a]/100;
}
cout<<u<<endl;//输出一百块有多少张。
int v=0;
for(int a=0;a<n;a++)
{
v+=arr[a]%100/50;
}
cout<<v<<endl;//输出五十块有多少张。
int w=0;
for(int a=0;a<n;a++)
{
w+=arr[a]%100%50/20;
}
cout<<w<<endl;//输出二十块有多少张。
int x=0;
for(int a=0;a<n;a++)
{
x+=arr[a]%100%50%20/10;
}
cout<<x<<endl;//输出十块有多少张。
int y=0;
for(int a=0;a<n;a++)
{
y+=arr[a]%100%50%20%10/5;
}
cout<<y<<endl;//输出五块有多少张。
int z=0;
for(int a=0;a<n;a++)
{
z+=arr[a]%100%50%20%10%5/1;
}
cout<<z<<endl; //输出一块有多少张。弄了一上午,终于搞出来了。
return 0;//弄了一上午,终于搞出来了。 你自己可以验证一下,算几种面值分别有多少张应该还可以优化。
}
这个题其实不难,就是有点绕。
这道题只是单纯的计算题,根本不是啥算法题。还出现啥贪心算法等等,都是扯。这种无需找零且要最小张数的,拿到一个人的工资,直接从大的开始除,余数接着除小的。所得的一定是结果一定是单个人最小张数(不找零原则)。 把每个人的结果加起来,就是全局最小张数。