题目:计算总人数
题目描述:
探姬同学活跃在各大论坛,QQ群,可谓粉丝众多,他想统计一下自己粉丝的数量,于是召集大家按行列排好队,最后一行有可能不满,但是探姬同学的数学是体育老师教的,他算不出总人数是多少,他要亲自数一下,探姬决定从后往前数,数了一个数后,再也数不下去了,于是重新从后往前数,第二次也没有数完,你能计算出来吗?
输入:
第一行输入三个整数分别为第一次数到的数量和所在的行列位置;
第二行输入三个整数分别为第二次数到的数量和所在的行列位置。
注意:队列的行数列数均大于0,并且小于等于10000;
输出:
如果你能替探姬算出总的粉丝数量,请输出这个数,如果通过给定的输入无法推算出粉丝数量,请输出“sorry!"。
样例输入:
6 3 2
9 2 3
样例输出:
15
样例说明:
第一次数到6是第3行第2列,第二次数到9是第2行第3列,可以推算出如下的站位形式
#include <stdio.h>
#include <math.h>
int main(void)
{ //h 行 l列 count 计算总人数 num 数到的数量
int hangshu, lieshu, h1, l1, num1, h2, l2, num2;
int flag, l11, count, num11;
scanf("%d%d%d%d%d%d", &num1, &h1, &l1, &num2, &h2, &l2);
if (h1 == h2 && h1 != 1)
{
printf("sorry!\n");
return 0;
}
if (h1 == h2 && h1 == 1)
{
printf("%d\n", num1 + (l1 - 1));
return 0;
}
flag = 0;
for (l11 = l1; l11 >= 1; l11 --)//l1小于l2的情况
if (l11 == l2)
{ /*计算列数 将第一次数到的位置平移到与第二次同列的地方
计算num2 与 平移后新位置的num1即num1 + (l1 - l11)相减
绝对值结果即列数*/
lieshu = abs(num2 - (num1 + (l1 - l11)));
flag = 1;
break;
}
if (flag == 0)//l1大于l2
for (l11 = l1; ; l11 ++)
if (l11 == l2)
{//计算列数 方法同上
lieshu = abs(num2 - (num1 - (l11 - l1)));
break;
}
num11 = num1;
/*将第一次数到的位置后移直下一行第一列,如果本来就在某一行的第一列
就不用移动了*/
num11 -= (lieshu - (l1 - 1));
hangshu = h1 + num11 / lieshu;
if (num11 % lieshu != 0)//如果末尾行人数不足一行
hangshu ++;
/*count等于第一次数过的人数num1加比num1行数小的所有人数加
与第一次最后数到的人在同一行但列数比它小的所有人*/
count = num1 + lieshu * (h1 - 1) + (l1 - 1);
printf("%d\n", count);
return 0;
}
报错:
Expected | Yours
162 | 342
我的代码测试样例是对的,但提交显示答案错误,怎么改这个代码?