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;
}