XYOJ 做题总结(一)

xyoj做题总结(一)

XYOJ地址http://xyoj1.xynu.edu.cn

1000

题目描述
小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词--DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧
输入格式
输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。
输出格式
输出DNA的形状,每组输出间有一空行。
#include<stdio.h>
int main()
{
    int N,a[20],b[20],i,j,k,p;
    scanf("%d",&N);
    i = 1;
    while(i<=N)
    {
        scanf("%d%d",&a[i],&b[i]);
        i++;
    }
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=b[i];j++)
        {
            for(k=1;k<a[i];k++)
            {
                for(p=1;p<=a[i];p++)
                {
                    if(p == k || p+k == a[i]+1)
                        printf("X");
                    else
                        printf(" ");
                }
                printf("\n");                
            }
        }
        for(j=1;j<=a[i];j++)
        {
            if(j == k || j+k == a[i]+1)
                printf("X");
            else
                printf(" ");
        }
        printf("\n");
        if(i != N)
        printf("\n");
    }
    return 0;
}

1006

题目描述
从键盘上输入以空格分隔的两个整数a和b,输出这两个数中较大的那个。

输入格式
输入两个整数a和b,以空格分隔。
输出格式
max=大值
#include <stdio.h>
int main()
    
{
    int a = 1;
    int b = 2;
    int max = 0;
    scanf("%d%d",&a,&b);
 
    max=a>b?a:b;
 
    printf("max=%d\n",max);
     
    return 0;
}

1007

题目描述
输入一系列的以空格分隔的整数对a和b,分别输出这两个数中较大的那一个。

输入格式
输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。

输出格式
对于输入的每对a和b,你需要依次输出a和b的较大值。

如对于输入中的第二对a和b,在输出中它们的较大者应该也在第二行。
#include <stdio.h>
 
int max(int x, int y) {
    return (x > y) ? x : y;
}
 
int main() {
    int x, y, z, m, o, n;
 
    scanf("%d%d", &x, &y);
    scanf("%d%d", &z, &m);
    scanf("%d%d", &o, &n);
 
    printf("%d\n", max(x, y));
    printf("%d\n", max(z, m));
    printf("%d\n", max(o, n));
 
    return 0;
}

1008

题目描述
编写一个程序,输入a, b, c三个值,输出其中最大者。
输入格式
输入三个整数a, b, c,以空格分隔。
输出格式
max=最大数
#include<stdio.h>
int main()
{
    int a, b, c;
    int max = 0;
    scanf("%d %d %d", &a, &b, &c);
    max = a;
  
    if (max < b)
    { 
        max = b;
    } 
    if (max < c)
    {
        max = c;
    }
    printf("max=%d", max);
     return 0;
}
#include <stdio.h>
int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    
    int n = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c;
    printf("%d", n);
    
    return 0;
}

1010

题目描述
有50个学生,要求将他们之中成绩在80分(含)以上的学号和成绩输出。
输入格式
共有50行输入,每一行包含两个用空格隔开的整数,分别代表一个学生的学号和成绩。输入数据保证每个学生的成绩在0至100之间(包含0和100)。
输出格式
输出每一个成绩大于等于80分的学生的学号和成绩,每一个学生一行,用一个空格隔开学号和成绩。
#include<stdio.h>
int main (){
    int arr1[50];
    int arr2[50];
    int i;
     
    for(i=0;i<50;i++){
        scanf("%d %d",&arr1[i],&arr2[i]);}
 
     
    for(i=0;i<50;i++){
        if (arr2[i]>=80){
            printf("%d %d\n",arr1[i],arr2[i]);
        }
    }
}

1012

题目描述

算出1-1/2+1/3-14+1/5。。。+1/99-1/100的值

输出格式

输出题目描述中表达式的值,使用C语言默认舍入方式保留8位小数。请注意行尾输出换行。

#include<stdio.h>
int main(){
double i,a,b,sum2=0,sum1=0,sum;
for(i=1;i<=100;i=i+2){
    a=1/i;
    sum1+=a;
}
for(i=2;i<=100;i=i+2){
    a=1/i;
    sum2+=a;
}
sum=sum1-sum2;
printf("%.8f",sum);
} 

要注意double和float的区别

float是单精度浮点数,占用4个字节的存储空间,表示小数点后面的6位。

double则是双精度浮点数,其存储空间为8个字节,能够表示的小数点后面的位数约为15位左右。

由于double使用的内存空间更大,因此其能提供的精度也更高,同时在进行数值运算时,double的运算速度可能会慢于float。

选择使用float还是double主要取决于你的具体需求。如果你需要更高的精度,或者你的数据量较大,那么double可能是更好的选择。然而,如果你对计算机的内存空间有限制,或者你的数据量较小,且对精度的要求不高,那么可以选择使用float。

1013

题目描述

输入一个大于等于3的正整数,判断其是否是素数。

输入格式

一个大于等于3并小于10000的正整数n。

输出格式

如果n是素数,输出“prime”,否则请输出“not prime”。

请注意不需要输出引号,行尾输出换行。

#include<stdio.h>
int main(){
    int a,x=1;
    scanf("%d", &a);
    if (a<3) return 0;
    if (a>10000) return 0;
    for (int i = 2; i <= a / 2; i++) { 
        if (a % i == 0) {
            x = 0; 
            break;
        }
    }
    if (x == 1) {
        printf("prime\n");
    } else {
        printf("not prime\n");
    }
    return 0;
}

更简便的算法是检测到a的算术平方根即可

#include<math.h>
for (int i = 2; i <=sqrt(a); i++)

1014

题目描述

输入10个整数,输出其中最大的数。

输入格式

输入包含10行,每一行一个整数。

输出格式

请输出读入的10个数中的最大值。请注意行尾输出换行。

#include<stdio.h>
int main(){
    int a,max;
    scanf ("%d",&max);
    for (int i=1;i<=9;i++){
        scanf("%d",&a);
            if(a>max)
                max=a;
    }
    printf("%d",max);
}

1015

题目描述

输入3个整数a、b、c,按从小到大的顺序输出。

输入格式

输入包含一行,包含三个用空格隔开的整数。

输出格式

请按从小到大的顺序输出读入的三个数。请注意行尾输出换行。

#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    if (a > b) {
        int temp = a;
        a = b;
        b = temp;
    }
    if (a > c) {
        int temp = a;
        a = c;
        c = temp;
    }
    if (b > c) {
        int temp = b;
        b = c;
        c = temp;
    }

    printf("%d %d %d\n", a, b, c);
    return 0;
}

  • 32
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值