OJ算法可运行⑩

OJ算法题共10个篇幅,不定期在篇幅里增加题目(篇幅不增加)。

个人水平有限,如有错误和可以改进的地方,非常期待批评指正,谢谢!

题目描述:

象棋中,车走一步可以抵达同一行或同一列的某个位置,给你三个车的坐标,判断有几辆车可以一步到达指定坐标。
输入:

第一行输入两个整数x,y
(中间用空格隔开),代表需要抵达的坐标。
第二行输入x1,y1,x2,y2,x3,y3

(中间用空格隔开),代表三辆车的坐标。 数据保证坐标合法(即你不用考虑输入不合法的情况,无须进行不合法数据的判断和处理),且车不会阻碍其他车到达指定的坐标。
输出:

输出可以一步抵达指定坐标的车的数量。
输入样例:

1 1
1 7 8 1 3 3

输出样例:

2

#include"stdio.h"
int main(){
    int x,y;
    int x1,y1,x2,y2,x3,y3;
    int i=0;
    scanf("%d%d%d%d%d%d%d%d",&x,&y,&x1,&y1,&x2,&y2,&x3,&y3);
    if(x==x1||y==y1){
        i++;
    }
    if(x==x2||y==y2){
        i++;
    }
    if(x==x3||y==y3){
        i++;
    }
    printf("%d",i);
    return 0;
}

题目描述

给出一个分子式(不带括号),求相对分子质量。本题只包含4种原子,分别为C,H,O,N,相对原子质量分别为12.01,1.008,16.00,14.01,(单位:g/mol)。

输入

输入一个不带括号的分子式,字符串长度不超过100,分子式只有大写字母。

输出

输出分子式的相对分子质量,小数点后保留三位。

输入样例

C2H5OH

输出样例

94.108

 

考察知识点:

字符串处理

解题思路:

将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间,进行字符串到整数的转换,再乘以其的原子质量,最后累加到sum中即可。

注意两个字母相邻的情况,直接累加原子质量到sum。

#include<stdio.h>  
#include<string.h>  
#include<ctype.h>  
char s[100];  
int main () {
    scanf("%s", s);
    int i;
    int sum = 0;
    double m = 0, n = 0;
    for (i = 0; i < strlen(s); i++) {
    	if (isupper(s[i])) {  
            switch (s[i]) {
                case 'C': n = 12.01; break;
                case 'H': n = 1.008; break;
                case 'O': n = 16.00; break;
                case 'N': n = 14.01; break;
            }
            sum = 0;
        } 
		// 字符串转整数
        while (isdigit(s[i])) {
            sum = sum * 10 + s[i] - '0';  
            if (!isdigit(s[i + 1]))
                break;
            i++;
        }
        if (sum != 0)
            m += sum * n;
        else if (!isdigit(s[i + 1]))
            m += n;
    }
    printf("%.3f\n", m);
    return 0;
}

 

题目描述

给定一个长度为 n
的单调非下降有序数组(可能有重复元素),以及 k 个询问,每个询问包含一个整数 m

对于每个询问,输出数组中整数 m
出现的最大下标(下标从0开始),若数组中没有 m,则输出 ?1


输入

第一行为两个正整数 n,k(n,k≤105)
,n 为数组长度,k

为询问个数。

第二行为 n
个整数 ai,为数组的 n

个元素,保证在 int 范围内,且这n个数是单调非下降的。

第 3~k+2
行每行一个整数mi,保证在 int 范围内,依次为 k 个询问对应的整数 m


输出

对于每个询问,输出一行一个整数 index

,为该询问的答案。
输入样例

10 3
1 2 3 3 4 5 6 8 8 8
5
3
8

输出样例

5
3
9

HINT

使用线性查找可能会超时
 

#include<stdio.h>//内存超时
int main()
{
   int a,b,c,d;
   scanf("%d%d",&a,&b);
   int e[a+1],f[b+1];
   for(c=1;c<=a;c++)
   {
       scanf("%d",&e[c]);
  }
    for(d=1;d<=b;d++){
        scanf("%d",&f[d]);
    }
    for(int j=1;j<=d;j++){
        int x=0;
        for(int i=1;i<=a;i++)
        {
            if(e[i]==f[j]){
                x=i;
            }
        }
        if(x!=0)printf("%d\n",x-1);
    }
    return 0;
   }

题目描述

Terry 现在有一个括号序列,问它们是否可以完全匹配。
输入

一行字符串,长度小于 100

,只包括 ()[]<> 中的字符。
输出

输出一行,如果可以完全匹配,输出 Yes,失配则输出 No。
输入样例

<>>

输出样例

No

#include<stdio.h>
int stack[100],s_top=0;
void push(int?v)
{
    stack[s_top++]=v;
}
int stack_empty()
{
    return s_top==0;
}
int pop()
{
    return stack[--s_top];
}
int main()
{
    char s[100];
    scanf("%s",?s);
    char*p;
    int d;
    for(p=s;*p!='\0';p++)
    {
        if(*p=='('||*p=='['||*p=='<')
            push(*p);
            if(*p==')'||*p==']'||*p=='>')
        {
            if(stack_empty()){
                printf("No");
                return?0;}
            d=pop();
            if((*p=='('&&d==')')||(*p=='['&&d==']')||(*p=='<'&&d=='>'))
                continue;
        }

    }
    stack_empty()?printf("Yes"):printf("No");

}


一个整数 a(0<a<100)

输出

a+1
行,从到 0℃ 到 a℃

所有整数对应的华氏温度,结果向下取整。
输入样例

3

输出样例

0 C = 32 F
1 C = 33 F
2 C = 35 F
3 C = 37 F 

HINT

不需要长度控制,确认输出格式与样例一致
 

#include<stdio.h>
int main()
{
    int a,i;
    scanf("%d",&a);
    for(i=0;i<=a;i++)
    printf("%d C = %d F\n",i,i*9/5+32);

}

上一篇

下一篇

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

磊磊cpp

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

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

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

打赏作者

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

抵扣说明:

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

余额充值