杭电ACM基础题(2021、2022、2023、2024、2025、2026、2027、2028、2029、2030)

2021、发工资

财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有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

Code
给老师发工资,老师的工资都是正整数,人民币一共有100元、50元、10元、5元、2元和1元六种。最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?理解题意,不难

/*
老师的工资都是正整数,人民币一共有100元、50元、10元、5元、2元和1元六种。
最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
*/
#include<iostream>
using namespace std;
int main(){
   
    int n,salary,sum;//老师人数[1,99]
    while(cin>>n){
   
        if(n==0) return 0;
        sum=0;
        for(int i=0;i<n;i++){
   
            cin>>salary;
            while(salary>0){
   
                if(salary>=100){
   
                    sum=sum+salary/100;
                    salary=salary%100;
                }
                else if(salary>=50){
   
                    sum=sum+salary/50;
                    salary=salary%50;
                }
                else if(salary>=10){
   
                    sum=sum+salary/10;
                    salary=salary%10;
                }
                else if(salary>=5){
   
                    sum=sum+salary/5;
                    salary=salary%5;
                }
                else if(salary>=2){
   
                    sum=sum+salary/2;
                    salary=salary%2;
                }
                else{
   
                    sum=sum+salary;
                    salary=0;
                }
            }//while循环 
        }//for循环 
        cout<<sum<<endl;
    } 
    return 0;
} 

2022、在二维数组中,寻找绝对值最大的数

输入m行n列的数据,输出其中绝对值最大的数所在的行数,列数和数据
如果有多个绝对值相等的数值,则输出行号最小的那个
若行号也相同,则输出列数最小的那个
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

Code
对二维数组排序,不难

/*
输入m行n列的数据,输出其中绝对值最大的数所在的行数,列数和数据 
如果有多个绝对值相等的数值,则输出行号最小的那个
若行号也相同,则输出列数最小的那个 
*/
#include<iostream>
#include<cmath>
using namespace std;

int scoreArray[100][100];
int main(){
   
    int m,n;//m行n列 
    while(cin>>m>>n){
   
        for(int i=0;i<m;i++){
   
            for(int j=0;j<n;j++){
   
                cin>>scoreArray[i][j];
            }
        }
        //寻找scoreArray[]数组中绝对值最大的数
        int maxscore=scoreArray[0][0],k,s;
        for(int i=0;i<m;i++){
   
            for(int j=0;j<n;j++){
   
                if(abs(maxscore)<abs(scoreArray[i][j])){
   
                    maxscore=scoreArray[i][j];
                    k=i+1;
                    s=j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值