【2022.12.13每天四个简单题之简单题大智慧系列7】(菱形,钞票和硬币,加薪,动物 )

菱形

输入一个奇数 n,输出一个由 + 构成的 n 阶实心菱形。

输入格式
一个奇数 n。

输出格式
输出一个由 *+构成的 n 阶实心菱形。

具体格式参照输出样例。

数据范围
1≤n≤99
输入样例:
5
输出样例:
+
+++
+++++
+++
+
直接做会比较麻烦,一定要找一下规律
可以发现:
到中点的曼哈顿距离(两方向差值的绝对值的和)<=n/2
如果是,就输出+,如果不是就输出空格
如果是c++

#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int cx=n/2,cy=n/2;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(abs(cx-i)+abs(cy-j)<=n/2){
                printf("*");
            }else{
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

如果是java:java中没有math,故要用Math.abs

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int cx = n / 2, cy = n / 2;
        for (int i = 0; i < n; i ++ ) {
            for (int j = 0; j < n; j ++ ) {
                int d = Math.abs(i - cx) + Math.abs(j - cy);
                if (d <= n / 2)
                    System.out.printf("*");
                else
                    System.out.printf(" ");
            }
            System.out.println();
        }
    }
}

钞票和硬币

读取一个带有两个小数位的浮点数,这代表货币价值。

在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的总数量尽可能少。

钞票的面值是 100,50,20,10,5,2。

硬币的面值是 1,0.50,0.25,0.10,0.05 和 0.01。

经过实验证明:在本题中,优先使用面额大的钞票和硬币可以保证所用的钞票和硬币总数量最少。

输入格式
输入一个浮点数 N。

输出格式
参照输出样例,输出每种面值的钞票和硬币的需求数量。

数据范围
0≤N≤1000000.00
输入样例:
576.73
输出样例:
NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01
这个题如果我们要使用double来看的话,首先在c++中,double取余要用到fmod函数
double fmod(double x,double y)返回x除以y的余数
其次,double的精度可能会出问题
解决办法
1.都乘以一百然后通过整数来算
代码如下:(c++)

#include <iostream>
using namespace std;
int main()
{
  double n;
  cin>>n;
  int m=(int)(n*100);
  int a[12]={10000,5000,2000,1000,500,200,100,50,25,10,5,1};
  printf("NOTAS:\n");
  for(int i=0;i<12;i++)
  {
      if(i<6){printf("%d nota(s) de R$ %.2f\n",m/a[i],(float)a[i]/100);m%=a[i];}
      if(i==6)printf("MOEDAS:\n");
      if(i>=6){printf("%d moeda(s) de R$ %.2f\n",m/a[i],(float)a[i]/100);m%=a[i];}
  }
return 0;
}

2.n输入后加上一个很小的数,比如0.00000001(c++)

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
    double n;
    
    scanf("%lf",&n);
    n+=1e-8;
    double a[12]={100,50,20,10,5,2,1,0.50,0.25,0.10,0.05,0.01};
    
    printf("NOTAS:\n");
    for(int i=0;i<6;i++){
        
            printf("%d nota(s) de R$ %.0f.00\n",(int)(n/a[i]),a[i]);
             n=fmod(n,a[i]);
        }
        printf("MOEDAS:\n");
        for(int i=6;i<12;i++){
            printf("%d moeda(s) de R$ %.2f\n",(int)(n/a[i]),a[i]);
            
        
        n=fmod(n,a[i]);
        
}
    return 0;
}

java代码类似写就可以

加薪

ABC 公司决定给员工加薪,加薪情况如下所示:

薪水                涨薪幅度

0 - 400.00 15%
400.01 - 800.00 12%
800.01 - 1200.00 10%
1200.01 - 2000.00 7%
超过 2000.00 4%
读取员工的工资,计算并输出员工的新工资,以及员工增加的收入和涨薪幅度。

输入格式
共一行,包含一个保留两位小数的浮点数。

输出格式
输出格式如下所示:

第一行输出 Novo salario: X,X 表示员工新工资,保留两位小数。

第二行输出 Reajuste ganho: Y,Y 表示员工增加的具体收入数值,保留两位小数。

第三行输出 Em percentual: Z,Z 表示涨薪幅度,注意用百分比表示。

数据范围
0≤原工资≤2500.00
输入样例:
400.00
输出样例:
Novo salario: 460.00
Reajuste ganho: 60.00
Em percentual: 15 %
这个题可以通过不断判断来写
java:

#include<bits/stdc++.h>
using namespace std;
double a[6]={0,400.00,800.00,1200.00,2000.00,2500.00};
double b[5]={0.15,0.12,0.10,0.07,0.04};
double x;
double ans,sum;
int res;
int main()
{
    cin>>x;

    for(int i=0;i<5;i++)
    {
        if(x>a[i]&&x<=a[i+1])
        {
            sum=x*b[i];
            ans=x+sum;
            res=b[i]*100;
            break;
        }
    }

    printf("Novo salario: %.2lf\n",ans);
    printf("Reajuste ganho: %.2lf\n",sum);
    printf("Em percentual: %d %\n",res);
    return 0;
}

如果想输出特殊字符需要加上转义符号,一般是加上反斜杠
如果我们要输出冒号:\"
一个杠:\\
一个百分号:%%

动物

给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。

请你确定并输出这个动物的名称。
在这里插入图片描述
输入格式
根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。

输出格式
输出识别出的动物的名称。

输入样例:
vertebrado
mamifero
onivoro
输出样例:
homem
此题可以通过不断判断来做,这里就不再赘述,但是以下的点很有意思
在c++里面判断字符串相等是用等号判断,但是在java中不能用等号,要用一个函数equals
a.equals("/*输入要比较的字符串*/")
但是在工程中,如果a为空,调用equals可能会报异常,如果不想处理异常可以这样写:"/*输入要比较的字符串*/".equals(a)将常量放在前面即可。

代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next(), b = sc.next(), c = sc.next();

        String res;
        if ("vertebrado".equals(a)) {
            if ("ave".equals(b)) {
                if ("carnivoro".equals(c)) {
                    res = "aguia";
                } else {
                    res = "pomba";
                }
            } else {
                if ("onivoro".equals(c)) {
                    res = "homem";
                } else {
                    res = "vaca";
                }
            }
        } else {
            if ("inseto".equals(b)) {
                if ("hematofago".equals(c)) {
                    res = "pulga";
                } else {
                    res = "lagarta";
                }
            } else {
                if ("hematofago".equals(c)) {
                    res = "sanguessuga";
                } else {
                    res = "minhoca";
                }
            }
        }

        System.out.println(res);
    }
}

当然如果要是想要减少判断,也可以这样写(这次就用c++吧)
通过前三个字符来判断更加简洁明了!

#include <iostream>
#include<cstdio>
using namespace std;

int main()
{
    string a[3];
    string ss;
    for(int i=0;i<3;i++) cin>>a[i],ss+=a[i][0];


    if(ss=="vac") cout<<"aguia";
    if(ss=="vao") cout<<"pomba";
    if(ss=="vmo") cout<<"homem";
    if(ss=="vmh") cout<<"vaca";
    if(ss=="iih") // 情况特殊
    {
        if(a[2] == "hematofago") cout<<"pulga";
        else cout<<"lagarta";
    }
    if(ss=="iah") cout<<"sanguessuga";
    if(ss=="iao") cout<<"minhoca";
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想进步的22级本科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值