一、链接
二、题目、代码及问题
L1-025 正整数A+B
题目:
题的目标很简单,就是求两个正整数A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[10000],b[10000];
int i=0,j=0,x=0,y=0,z=0;
int sa=0,sb=0;
while(1)
{
scanf("%c",&a[i]);
if (a[i]==' ')//遇到空格跳出,输入B
break;
if (a[i]<48||a[i]>9+48)
x=1;
i++;
}
int n=i;//记录A的长度
if (n==0)//A是空字符串
x=1;
scanf("%s",b);
for (j=0;b[j]!='\0';j++)
{
if (b[j]<48||b[j]>57)//不是符合要求的实数
y=1;
}
if (x==0)
{
for (i=0;i<n;i++)
{
sa*=10;
sa+=a[i]-48;//将字符数组转换成数字
}
if(sa>1000||sa<1)//超范围
x=1;
}
if (y==0)
{
for (i=0;i<strlen(b);i++)
{
sb*=10;
sb+=b[i]-48;//将字符数组转换成数字
}
if(sb>1000||sb<1)
y=1;
}
if (x==1||y==1)//有一个不符合要求的,结果就输出?
z=1;
if (x==0)
printf("%d",sa);
else
printf("?");
printf(" + ");
if (y==0)
printf("%d",sb);
else
printf("?");
printf(" = ");
if (z==0)
printf("%d",sa+sb);
else
printf("?");
return 0;
}
问题:
有一个案例过不去不知道为什么。。。求会的大佬指点一下。
L1-037 A除以B
题目:
真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。
输入格式:
输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。
输出格式:
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error
。输出的商应保留小数点后2位。
输入样例1:
-1 2
输出样例1:
-1/2=-0.50
输入样例2:
1 -3
输出样例2:
1/(-3)=-0.33
输入样例3:
5 0
输出样例3:
5/0=Error
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
double a,b;
cin >> a >> b;
if (b>0)//a,b都是整数,没有小数
printf("%.0lf/%.0lf=%.2lf",a,b,a/b);//结果保留2位小数
else if (b==0)
printf("%.0lf/%.0lf=Error",a,b);
else
printf("%.0lf/(%.0lf)=%.2lf",a,b,a/b);
return 0;
}
L1-040 最佳情侣身高差
题目:
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j;
cin >> n;//人数
double h;//身高
char x;//性别
for (i=0;i<n;i++)
{
cin >> x >> h;
if (x=='M')//男
h/=1.09;
else //女
h*=1.09;
printf("%.2lf\n",h);//注意保留两位小数
}
return 0;
}
L1-041 寻找250
题目:
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i=1,h;
while(1)
{
scanf("%d",&n);
if (n==250)//不用管250后面的数,遇见第一个250直接跳出循环输出
{
h=i;
break;
}
i++;
}
printf("%d",h);
return 0;
}
问题:
一开始想复杂了,一直在纠结怎么停止输入的问题,后来想通了,完全不用管后面数的死活,只找出第一个250的位置就可以了。