SCAU程序设计在线实训平台_高频题_1

1 判断点是否在圆上

描述

由键盘输入一个点的坐标, 要求编程判断这个点是否在单位圆(圆心在坐标0,0)上,点在圆上输出Y, 不在圆上输出N。
使用小数点后3位精度进行判断。

输入样例

0.707,0.707

输出样例

Y

#include <stdio.h>
#include <math.h>
int main()
{
    double x,y,r;
    scanf("%lf,%lf",&x,&y);
    r=x*x+y*y;
    if(fabs(1-r)<=0.009){
        printf("Y");
    }
    else{
        printf("N");
    }
}

2 回文串的判断(加强版)

描述

回文串是指一个字符串从左读到右与从右读到左是一样的,现由键盘输入一行字符(最多不超过80个字符,以回车结束),
判断能否通过去掉0个或1个字符,使得字符串成为回文串,如果可以输出Y,否则输出N

输入格式

一行字符

输出格式

Y或N

输入样例

abca

输出样例

Y

提示

提示,去掉c字符,即可成为回文串

代码实现(参考):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int rebackstr(char a[]){
    char b[80];
    int lena=strlen(a);
    for(int i=0;i<lena;i++){
        b[lena-i-1]=a[i];
    }
    for(int i=0;i<lena;i++){
        if(a[i]!=b[i])return 0;
    }
    return 1;
}

void strdelchar(char a[],int n,char b[]){
    int lena = strlen(a);
    int i;
    for(i=0;i<lena;i++){
        if(i>=n)b[i]=a[i+1];
        else b[i]=a[i];
    }
    b[i]='\0';

}

int main()
{
    char a[80],b[80];
    scanf("%s",a);
    if(rebackstr(a)){printf("Y");return 0;}

    int lena=strlen(a);
    for(int i=0;i<lena;i++){
        strdelchar(a,i,b);
        if(rebackstr(b)){printf("Y");return 0;}
    }
    printf("N");
    return 0;
}

没有经过OJ评测

3 回文串(题目编号:1145):

描述:

读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从右向左拼写是一样的),是则输出Y,不是则输出N。

输入格式:

一行字符串

输出格式:

是则输出Y,不是则输出N

输入样例:

abba

输出样例:

Y

提示:

input:
abcba
output:
Y


input:
abc
output:
N

系统标程(参考):
#include "stdio.h"
#include "string.h"
main()
{ 
	int i, j;
    char buf[100];
    scanf("%s",buf);
    for(i=0, j=strlen(buf)-1;i<j; i++, j--)
        if(buf[i]!=buf[j]) break;
   if(i>=j)
        printf("Y");
    else
        printf("N");
}

回文串是真的做了无数遍

4 勾股数

描述

若三个正整数a、b、c,其中a<=b<=c,满足a2+b2=c2,其中表示上标,称这三个数为“勾股数”,例如:3、4、5是勾股数。编程输出不大于n的所有勾股数。

输入格式

输入一个数(n<=100)

输出格式

输出所有勾股数,按第1个数字由小到大排列(若第1个数字相同,按第2个数字排)

输入样例

16

输出样例

3 4 5
5 12 13
6 8 10
9 12 15

#include "stdio.h"

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++){
        for(int j=i; j<=n; j++){
            for(int k=j; k<=n; k++){
                if(i*i+j*j==k*k){
                    printf("%d %d %d\n",i,j,k);
                }
            }
        }
    }
}

5 计算阶乘

描述

输入正整数n(n<12),计算n!(注n!=123*…*n)

输入样例

3

输出样例

6

代码实现(参考):
#include <stdio.h>
int F(int n){
    int j = 1;
    for(int i = 1; i <= n; i++){
        j *= i;
    }
    return j;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",F(n));
}

6 计算数列和

描述

有数列:
在这里插入图片描述
编程实现,由键盘输入n,计算输出数列前n项和。(结果保留四位小数,提示:要使用double,否则精度不够)

输出格式

请按格式输出

输入样例

20

输出样例

32.6603

代码实现(参考):
#include "stdio.h"

int main()
{
    int n;
    scanf("%d",&n);
    double a=2,b=1,sn=0,t;
    for(int i = 1; i<=n; i++){
        sn+=a/b;
        t=a;
        a=a+b;
        b=t;
    }
    printf("%.4lf",sn);
}

}

考前复习、未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值