资源描述
1054 平方数
Description
描述
给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么<x,y>组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={2,3,4},则只有4=2*2,则答案为1。
输入
每个样例占2行,第一行为一个非负整数n,n<=1000,为集合中元素的个数,如果n为0则输入结束。第二行为n个整数,为集合的元素,所有的元素为非负整数,且<=100,000,000,两个整数之间有一个空格隔开。
输出
每行输出一个样例的结果。
Sample Input
3
2 3 4
5
3 36 5 9 6
0
Sample Output
1
2
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int n, i, i1, i2, x, y, s, str[1001];
while (scanf("%d", &n)==1&&n)
{
s=0;
for (i=0;i<n;i++)
{
scanf("%d ", &str[i]);
}
for (i1=0;i1<n;i1++)
{
x=str[i1]*str[i1];
for (i2=0;i2<n;i2++)
{
y=str[i2];
if (x==y)
{
s++;
}
}
}
printf("%d\n", s);
}
return 0;
}
1155 整数分类
Description
按照下面方法对整数x进行分类:如果x是一个个位数,则x属于x类;否则将x的各位上的数码累加,得到一个新的x,依次迭代,可以得到x的所属类。比如说24,2+4=6,则24的类别数是6;39,3+9=12,1+2=3,则39的类别数是3。
输入
每行输入一个非负整数n,n≤10500,n为0时结束。
输出
每行输出对应整数的分类数。
Sample Input
24
39
0
Sample Output
6
3
#include<stdio.h>
#include<string.h>
int main()
{
char str[501];
int i, sum, a;
gets (str);
while (str[0]!='0')
{
for (i=0,sum=0;i<strlen(str);i++)
{
sum+=str[i]-'0';
}
while (sum>=10)
{
a=sum;
sum=0;
while (a)
{
sum+=a%10;
a=a/10;
}
}
printf("%d\n",sum);
gets (str);
}
return 0;
}
1157 XTU方阵
Description
eXtreme Talent University(XTU)需要为他们的校名打印一些特别的图形,为了美观,他们选择了方阵。现在他们需要你的帮助,帮他把这些方阵打印出来。如果方阵一边只由一个XTU的校名组成,则方阵为:
XTU
XTU
XTU
输入
每个样例占一行,每行是一个整数n(0<=n<=10),表示一行需要使用多少个校名,n为0是输入结束标志。
输出
对于每个样例,先输出样例序号,比如说第一个样例输出“Case 1:”,换行再输出对应样例的方阵,每个方阵后有一个空行。
Sample Input
1
2
0
Sample Output
Case 1:
XTU
XTU
XTU
Case 2:
XTUXTU
XTUXTU
XTUXTU
XTUXTU
XTUXTU
XTUXTU
#include <stdio.h>
main()
{
char a[4]={'X','T','U'};
int i, n, k, t, h;
i=1;
while (scanf("%d", &n)==1&&n)
{
printf("Case %d:\n", i++);
for (h=0;h<n;h++)
{
for (t=0;t<3;t++)
{
for (k=0;k<n;k++)
{
printf("%s", a);
}
printf("\n");
}
}
printf("\n");
}
}
1058 青蛙王子
Description
一个王子被巫师诅咒,变成了一只青蛙。500年后的一天,青蛙王子碰到了一个仙女,仙女告诉他,如果他能通过一个简单的测试,她就能帮他解除诅咒。测试是这样子的,仙女要青蛙王子在一条直线上跳跃(青蛙王子最开始站在坐标为0的地方),但只能按照她给定的两种长度跳跃(假设这两种长度王子都能跳到),可以往前或者往后跳,如果能达到指定的地点,那么就通过测试;仙女给定的方式有多种,但有些是不可能满足达到指定地点的。请你帮帮可怜的青蛙王子,寻找出那些可以完成测试的跳跃方式。
输入
每个样例占一行,为3个整数,都可以用一个unsigned int表示。前两个表示可以跳跃的长度,最后一个表示需要达到的地点的坐标。如果三个数为0,表示输入结束。
输出
每行输出一个样例的结果,如果可以到达指定的地点,输出Yes,否则输出No。
Sample Input
2 5 9
3 7 2
4 8 3
0 0 0
Sample Output
Yes
Yes
No
#include <stdio.h>
main()
{
unsigned int a, b, c;
int e, k;
for (k=1;;k++)
{
scanf("%u %u %u", &a, &b, &c);
if(a==0&&b==0&&c==0)
break;
if(a==0&&b==0)
printf("No\n");
else
{
if(a<b)
{
e=a;a=b;b=e;
}
while(b!=0)
{
if(a>b)
{
e=a;a=b;b=e;
}
b=b%a;
}
if(c%a==0)
printf("Yes\n");
else
printf("No\n");
}
}
}
1059 有多少个1?
Description
计算机中存储的整数都是按补码的型式,一个32位有符号整数的补码的定义为:如果x>=0,则x的补码等于x的二进制表示;如果x<0,那么x的补码为2^32+x的二进制表示。请根据给定的整数,求出它的补码包含有多少位为1。
输入
每行一个样例,为一个整数(可以用int表示)。
输出
每行输出一个对应样例的结果。
Sample Input
1
0
-1
Sample Output
1
0
32
#include<stdio.h>
#define sum 4294967296
int main()
{
long long int i, n;
int c=0;
while(scanf("%I64d",&i)!=EOF)
{
if(i<0)
i=i+sum;
while(i!=0)
{
n=i%2;
i=i/2;
if(n==1)
c++;
}
printf("%d\n",c);
c = 0;
}
return 0;
}
1062 大小写转换
Description
接收一个字母,如果是小写,则将其转换成大写;如果是大写,就将其转换成小写。
Sample Input
b
Sample Output
B
#include <stdio.h>
main()
{
char ch;
scanf("%c", &ch);
if (ch>=97&&ch<=122)
{
ch = ch - 32;
printf("%c", ch);
}
else
{
ch = ch + 32;
printf("%c", ch);
}
}
1063 输入输出1
Description
请输入一个非负整数,输出其10进制和16进制(使用A-F)的值,中间用逗号隔开,不要输出换行.
Sample Input
15
Sample Output
15,F
#include <stdio.h>
main()
{
int a;
scanf("%d", &a);
printf("%d,%X", a, a);
}
1064 输入输出2
Description
读取一个整数和一个字符并输出它们,中间用逗号隔开,不要输出回车
Sample Input
234 H
Sample Output
234,H
#include <stdio.h>
main()
{
int a; char b;
scanf("%d %c", &a,&b);
printf("%d,%c", a,b);
}
1065 io3
Description
1. 读取一个单精度浮点数并输出它(保留小数点后3位)
Sample Input
1.23
Sample Output
1.230
#include <stdio.h>
main()
{
float a;
scanf("%f", &a);
printf("%.3f", a);
}
1066 io4
Description
1. 读取一个双精度浮点数,并输出它(保留小数点后8位),无须输出换行
Sample Input
1.098765432
Sample Output
1.09876543
#include <stdio.h>
main()
{
double a;
scanf("%lf", &a);
printf("%.8lf", a);
}
1067 io5
Description
输入一个字符,按格式输出这个字符及它的ASCII码
Sample Input
A
Sample Output
The ASCII of 'A' is 65.
#include <stdio.h>
main()
{
char a;
scanf("%c", &a);
printf("The ASCII of '%c' is %d.", a, a);
}
1068 if语句1
Description
输入一个整数,如果整数在90和100之间,那么输出A;否则输出B。
Sample Input
90
Sample Output
A
#include <stdio.h>
main()
{
int a;
scanf("%d", &a);
if((90 <= a )&( a <= 100))
{
printf("A");
}
else
{
printf("B");
}
}
1069 if语句2
Description
输入整数n,如果n是偶数,则输出“n is even.”,否则输出"n is odd."
Sample Input
6
Sample Output
6 is even.
#include <stdio.h>
main()
{
int n, a;
scanf("%d", &n);
a = n%2;
if(a == 0)
{
printf("%d is even.", n);
}
else
{
printf("%d is odd.", n);
}
}
1070 if3
Description
输入一个三位的整数,如果它有且仅有两位数码相同,那么就输出Yes,否则输出No
Sample Input
112
Sample Output
Yes
#include <math.h>
#include <stdio.h>
main()
{
int a, b, c, d;
(100 <= a) & (a <= 999);
scanf("%d", &a);
b = a / 100;
c = ((a - (a%10))/10)%10;
d = a%10;
if((b == c && d!=b)||(b == d && c!=b)||(c == d && b!=c))
{
printf("Yes");
}
else
{
printf("No");
}
}
1071 if4
Description
输入三角形的三条边a,b,c;如果构成三角形那么就计算三角形的面积并输出,保留2位小数,否则输出“Not a triangle.”
Sample Input
3 5 4
Sample Output
6.00
#include <math.h>
#include <stdio.h>
main()
{
int a, b, c, d;
(100 <= a) & (a <= 999);
scanf("%d", &a);
b = a / 100;
c = ((a - (a%10))/10)%10;
d = a%10;
if((b == c && d!=b)||(b == d && c!=b)||(c == d && b!=c))
{
printf("Yes");
}
else
{
printf("No");
}
}
1072 switch
Description
计算下面函数的值
y=cos(x+3.0) 当0<=x<10;
y=(cos(x+7.5))^2 当10<=x<20;
y=(cos(x+4.0))^4 当20<=x<30;
^表示幂运算,如x^2表示x的平方
如果x不在定义域内,输出“Not define”,否则输出y,保留5位小数
Sample Input
40
Sample Output
Not define
#include <stdio.h>
#include <math.h>
main()
{
float x, a, b, c;
scanf("%f", &x);
a = cos(x + 3.0);
b = pow(cos(x +7.5),2);
c = pow(cos(x + 4.0),4);
if (0 <= x && x < 10)
{
printf("%.5f", a);
}
else if (10 <= x && x < 20)
{
printf("%.5f", b);
}
else if (20 <= x && x < 30)
{
printf("%.5f", c);
}
else
{
printf("Not define");
}
}
1073 最大最小数
Description
输入3个互不相等的整数a,b,c,请输出最大的和最小的数,中间用一个空格隔开。
Sample Input
1 2 3
Sample Output
3 1
#include <stdio.h>
main()
{
int a, b, c, max, min;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
max = a, min = b;
}
else
{
max = b, min = a;
}
if (c > max)
{
max = c;
}
if (c < min)
{
min = c;
}
printf("%d %d", max, min);
}
1074 求和
Description
第一行是一个整数n(1<=n<=1000),表示有多少个数求和;
第二行是n个整数,每个整数都在-10^5到10^5之间,每个整数之间用空格隔开。
输出和的值(不要输出回车)
Sample Input
5
1 2 3 4 5
Sample Output
15
#include<stdio.h>
#include<stdlib.h>
main()
{
int n,x,c,sum;
sum=0,c=0;
scanf("%d",&n);
for(x=1;x<=n;x++)
{
scanf("%d",&c);
sum=sum+c;
}
printf("%d",sum);
}
1075 求最小公倍数
Description
有多个测试用例,每行两个正整数x,y,保证x*y不超过2^31-1。如果x与y都为0,则输入结束。
每行输出一个测试用例的结果,即x与y的最小公倍数。(最后一行有回车)
Sample Input
4 5
3 6
0 0
Sample Output
20
6
#include<stdio.h>
main()
{
int i,a,b,q,w;
for(i=1;;i++)
{
scanf("%d %d",&a,&b);
if(a==0||b==0) break;
w=a*b;
if(b>a)
{
q=a,a=b,a=q;
}
q=a%b;
while(q!=0)
{
a=b,b=q;
q=a%b;
}
printf("%d\n",w/b);
}
}
1076 素数
Description
对于大于1的自然数,如果n为素数,那么所有大于1且不大于n的平方根的自然数都不能整除n,反之亦然。所以我们可以通过测试来确定n是否为素数。现在给出n,要你求是否为素数,是输出Yes,否则输出No
每行一个正整数n,n<=2^32-1,如果n为0,则输入结束。判断n是否为素数
每行输出一个用例的结果,如果是输出"Yes",否则输出“No”
Sample Input
2
3
4
5
6
0
Sample Output
Yes
Yes
No
Yes
No
#include<stdio.h>
#include <math.h>
main()
{
__int64 x, i, j, k;
i=2;
while (scanf("%I64d",&x), x!=0)
{
j=sqrt((double)x)+1;
k=1;
for(i=2;i<=j&&k!=0;i++)
{
k=x%i;
}
if (i<=j || x==1)
printf("No\n");
else
printf("Yes\n");
}
}
1077 数字塔
Description
有多个输入测试用例,每个用例一行,是一个1-9的整数,输入为0则结束。
请输出一个数字塔,若输入是4,则输出的数字塔为:
1
222
33333
4444444
因为有多个样例,那么样例需要先输出一行"case 样例号:"
比如第一个样例是3,则输出
case 1:
1
222
33333
Sample Input
2
3
0
Sample Output
case 1:
1
222
case 2:
1
222
33333
#include <stdio.h>
main()
{
int i, n, k, t, q, a, m;
a=0;
while (scanf("%d", &n)==1&&n)
{
a++;
q=n;
printf("case %d:\n", a);
for (i=1;i<=n;i++)
{
m=q-1;
for (t=0;t<m;t++)
{
printf("%c", 32);
}
for (k=1;k<=(2*i-1);k++)
{
printf("%d", i);
}
printf("\n");
q--;
}
}
}
1078 字母三角形
Description
输出形如
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
的字母三角形。
输入有多个样例,每个样例是一行,每行是一个大写字母。当输入字符是‘#’时结束。样例前需要输出“case 样例号:”。如示例所示。
Sample Input
C
D
#
Sample Output
case 1:
ABCBA
ABA
A
case 2:
ABCDCBA
ABCBA
ABA
A
#include<stdio.h>
main()
{
char c,n,p;
int i ,j,k;
i=1;
while (scanf("%c",&c)&&c!='#')
{
printf("case %d:",i++);
putchar('\n');
for (j=0;j<=c-'A';j++)
{
for (k=0;k<j;k++)
printf(" ");
for (n='A';n<=c-j;n++)
printf("%c",n);
for (p=c-1-j;p>='A';p--)
printf("%c",p);
putchar('\n');
}
getchar();
}
}
1079 数学计算1
Description
请计算
答案使用浮点输出一行,不要输出多余的零,行尾有回车。C语言使用%g输出
#include <stdio.h>
main()
{
int n;
float a;
a = 5;
n = 0;
while(n < 3)
{
a = 1 + 1/a;
n = n + 1;
}
printf("%g\n", a);
}
1080 数学计算2
Description
请计算
答案输出一行,不要输出多余的零,行尾有回车。
C语言使用%g输出
#include <math.h>
#include <stdio.h>
main()
{
float a;
a = sqrt((3.2 * 3.2) + (4.7 * 4.7));
printf("%g\n", a);
}
1081 数学计算3
Description
请计算
PI=3.14159265
请输出一行,不要输出多余的零,行尾有回车。
C语言使用%g输出
#include <math.h>
#include <stdio.h>
main()
{
float a, PI;
PI=3.14159265;
a = sqrt((1 - cos(PI/3)) / 2);
printf("%g\n", a);
}
1082 数学计算4
Description
计算
PI=3.14159265
答案输出一行,不要输出多余的零,行尾有回车。
C语言使用%g输出
#include <math.h>
#include <stdio.h>
main()
{
float a, PI;
PI=3.14159265;
a = pow(sin(PI/4),2) + (sin(PI/4) * cos(PI/4)) - pow(cos(PI/4),2);
printf("%g\n", a);
}
1083 数学计算5
Description
请计算
答案输出一行,不要输出多余的零,行尾有回车。
C语言使用%g输出
#include <math.h>
#include <stdio.h>
main()
{
float a;
a = ((2 * sqrt(5)) * (sqrt(6) + sqrt(3))) / (6 + 3);
printf("%g\n", a);
}
1084 三角形的另一边
Description
已知三角形的两边长a,b,及它们的夹角p(单位度),求三角形的另外一边长。
输入
一行,a(a>0),b(b>0),p(180>p>0)
输出
一行,另外一边的边长,不要输出多余的零(C语言使用%g输出)。
Sample Input
3 4 90
Sample Output
5
#include <stdio.h>
#include <math.h>
main()
{
float a,d,e,p,b,PI,c,f,g,h;
PI=3.14159265;
scanf("%f %f %f",&a,&b,&p);
c=p*PI/180;
d=pow(a,2);
e=pow(b,2);
f=cos(c);
g=d+e-2*a*b*f;
h=pow(g,0.5);
printf("%g\n",h);
}
1085 求两点间的距离
Description
已知两点A(xa,ya),B(xb,yb),求其间的距离
输入
一行四个浮点数,xa,ya,xb,yb
输出
一行,距离,不要输出多余的零。
Sample Input
0 0 3 4
Sample Output
5
#include <math.h>
#include <stdio.h>
main()
{
float xa, ya, xb, yb, h;
scanf("%f %f %f %f", &xa, &ya, &xb, &yb);
h = sqrt(pow(yb - ya,2) + pow(xb - xa,2));
printf("%g\n", h);
}
1086 分段函数
Description
已知函数为
给定x,请求其函数值
输入
一行,x
输出
一行,f(x),不要输出多余的零。
Sample Input
0.5
Sample Output
0.25
#include <stdio.h>
#include <math.h>
main()
{
float x, a, b, c;
scanf("%f", &x);
a = 0;
b = pow(x,2);
c = pow(x,0.5);
if (x < 0)
{
printf("%g\n", a);
}
else if (0<=x&&x<=1)
{
printf("%g\n", b);
}
else
{
printf("%g\n", c);
}
}
1088 N!
Description
请求N!(N<=10000),输出结果对10007取余
输入
每行一个整数n,遇到-1结束。
输出
每行一个整数,为对应n的运算结果。
Sample Input
1
2
-1
Sample Output
1
2
#include <stdio.h>
int main()
{
int n, i, p;
while(1)
{
scanf("%d", &n);
if (n==-1) break;
p=1;
for (i=1; i<=n; i++)
{
p=p*i%10007;
}
printf("%d\n", p);
}
}
1089 质因数分解
Description
任意一个正整数可以分解成唯一的质因数的乘积,给出正整数,请计算出它的质因数分解式。
输入
每行一个正整数2<=n<=10^8。
输出
每行输出一个对应结果。使用”^”表示幂,”*”表示乘,质因子应该按从小到大的顺序输出,如果某一个质因子只有一次,那么就不要输出它的幂。
Sample Input
2
6
36
Sample Output
2
2*3
2^2*3^2
#include <stdio.h>
#include <math.h>
int main()
{
int n;
while(scanf("%d",&n)==1)
{
int t=floor((sqrt(n)+0.5));
int i,s,p=0;
for(i=2;i<=t;i++)
{
if (n%i==0)
{
if(!p)
p=1;
else
printf("*");
printf("%d",i);
n/=i;
s=1;
while(n%i==0)
{
n/=i;
s++;
}
if(s!=1)
printf("^%d",s);
}
}
if (n>1&&p==1)
printf("*%d",n);
else if (n>1&&p==0)
printf("%d",n);
printf("\n");
}
}
1090 组合数
Description
2^n=C(n,0)+C(n,1)+…+C(n,n)。其中^表示幂,C(n,x)表示组合数,即C(n,x)=n!/((n-x)!x!)。现在给你n(0<=n<=33),要你输出2^n的组合数之和的表达式
输入
每行一个整数n,如果n为负数则输入结束。
输出
每行输出一个表达式,表达
展开阅读全文