2021
Problem Description
如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input 输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。n=0表示输入的结束,不做处理。
Output 对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
Sample Input
3
1 2 3
0
Sample Output
4
原本加了层do while(remain!=0),后来发现无论输入什么数都只遍历一遍,这可能就是设计纸币面值时考虑的原因吧
#include<stdio.h>
#include<stdlib.h>
int main()
{
int list[100];
int inputnum;
while((scanf("%d",&inputnum)!=EOF)&&(inputnum!=0)){
int i,wage,remain;
int sum = 0;
for(i=0; i<inputnum; i++){
scanf("%d",&wage);
if(wage>=100){
sum = sum+wage/100;
remain = wage%100;
wage = remain;
}
if(wage>=50){
sum = sum+wage/50;
remain = wage%50;
wage = remain;
}
if(wage>=10){
sum = sum+wage/10;
remain = wage%10;
wage = remain;
}
if(wage>=5){
sum = sum+wage/5;
remain = wage%5;
wage = remain;
}
if(wage>=2){
sum = sum+wage/2;
remain = wage%2;
wage = remain;
}
if(wage>=1){
sum = sum+wage/1;
remain = wage%1;
wage = remain;
}
}
printf("%d\n",sum);
}
return 0;
}
2022
Problem Description 选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。
Input 输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output 对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m,n;
while(scanf("%d %d",&m,&n)!=EOF){
int i,j,indexi,indexj,list[100][100];
int max = 0;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
scanf("%d",&list[i][j]);
if(abs(list[i][j])>abs(max)){
max = list[i][j];
indexi = i+1;
indexj = j+1;
}
}
}
printf("%d %d %d\n", indexi,indexj,max);
}
return 0;
}