C语言的简单函数题?

我写了的运行超时,不知怎么搞了,帮我看看吧,我一新手不懂啊,题目如下
幼儿园给 p 位小朋友发 q 颗糖。结果发现:
若每人发 a 颗,则多 b 颗;
若每人发 c 颗,则差 d 颗。
请问:p、q 各为多少?
函数原型
// 剩余不足问题
int SurplusShortage(int *p, int *q, int a, int b, int c, int d);
说明:若问题有解,则将小朋友和糖的数量保存到 p 和 q 所指示的变量中,函数值为1(真);否则不改变 p 和 q 所指示的变量,函数值为0(假)。
裁判程序
#include <stdio.h>

// 剩余不足问题
int SurplusShortage(int *p, int *q, int a, int b, int c, int d);

int main()
{
int a, b, c, d, p, q;
scanf("%d %d %d %d", &a, &b, &c, &d);
if (SurplusShortage(&p, &q, a, b, c, d))
{
printf("%d %d\n", p, q);
}
else
{
printf("None\n");
}
return 0;
}

/* 你提交的代码将被嵌在这里 */
输入格式
a b c d
输出格式
p q
输入样例1
6 8 8 6
输出样例1

7 50

我写的
int SurplusShortage(int *p, int *q, int a, int b, int c, int d){
int x=0;
while((a*x+b)==(c*x-d)){
x++;
}
*p=x;
*q=a*x+b;
}

#include<stdio.h>


// 剩余不足问题

int SurplusShortage(int *p, int *q, int a, int b, int c, int d);


int main()

{

int a, b, c, d, p = 0, q = 0;

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

if (SurplusShortage(&p, &q, a, b, c, d))

{

printf("%d人 分 %d颗 糖\n", p, q);

printf("%d - (%d * %d) = %d\n", q, p, a, b);

printf("%d - (%d * %d) = -%d\n\n\n\n", q, p, c, d);

}

else

{

printf("None\n");

}

return 0;

}


int SurplusShortage(int *p, int *q, int a, int b, int c, int d)

{

int x = 0;

do

{

x++;

} while((a*x+b) != (c*x-d) && x <= 9999);


// p = 5

// q = 22

// 4 2

// 5 3


*p=x;

*q=a*x+b;


if(*p != 0 && *p <= 9999)

{

return 1;

}

else

{

return 0;

}

}


追问

还有一个地方不知道怎么办啊,就是输入a b c d,要输出,p q

追答

printf("%d人 分 %d颗 糖\n", p, q);

这一行不是已经打印了p q吗,大哥

你把我的代码直接复制到代码编译器,跑一下,看看能不能跑。我是vc++6的环境

追问

你的输出是none,可我的题目是要输出 p q对的

不知道怎么搞了

我好像看错了,没事了😂

谢谢了,pta的题目就是有点奇怪

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-23
传值调用。
在函数中改变形参(z)的值, 不会影响实参值(a)
于是a还是初始值38本回答被提问者采纳

C语言中的函数题
int NUM[10]={1,2,3,4,5,6,7,8,9,10} ;for(i=0;i<=9;i++){s+=NUM[i];} printf("%d",s);} 2.include "stdio.h"main(){int i,t;t=1;i=2;for(i=1;i<=5;i++)\/*循环从1到5*\/ {t*=i;} printf("%d",t);} 3.include <stdio.h>\/*调用库函数*\/ void ...

C语言入门题目,求详细易懂的解答过程。
答案为第一行:Tony。解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是代...

c语言的函数问题?
两个表达式分别用两个递归函数来实现。所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值。之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针。把两个函数分别赋值给指针,再通过指针调用函数。下面是代码:include <stdio.h> int fn1(int n);int fn2(int n);int ...

一题非常简单的C语言函数题,求3个数的最大值
include<stdio.h> int m(int a,int b, int c);int main(){int a,b,c,max;scanf("%d%d%d",&a,&b,&c);max=m(a,b,c);printf("最大值为%d\\n",max);} int m(int a,int b, int c){int max;if(a>=b) max = a;else max = b;if(max<c) max=c;return max;} 你...

几个简单的c语言小问题 解决一题给十分
if(!c) d=15; else d=25;是 else if(!b)下的语句 也不执行 二。 x=1 y=z=x; 赋值语句 x先赋给z 再赋给y x=y==z 先判断条件语句 y==z 是真 的 语句值为1 再赋给x 三。 第三题是要干什么 ...

求助一简单c语言题:调用函数求矩阵鞍点
include<stdio.h>void find_an(int a[][6],int n){int i,j,x,y,k,max,min,flag=0;for(i=0;i<n;i++) \/\/扫描所有的行{max=a[i][0]; y=0; \/\/首元素先作为行上"最大"的数 x=i;for(k=1;k<n;k++) if(max<=a[i][k])max=a[i][k]; \/\/找出行上...

2道C语言关于函数的题
1) int f(int a[4]){ int i,j;for(i=0;i<4;i++)for(j=i+1;j<4;j++)if (a[i]==a[j]) return 1;return 0;} 2) 你把三个函数全部去掉,函数相应内容只写写入main就行了。如果想用函数,你需要对函数参数,函数返回值,变量作用域有所了解。从你写程序可以看出,你对表达式...

C语言的简单函数题?
{ int a, b, c, d, p = 0, q = 0;scanf("%d %d %d %d", &a, &b, &c, &d);if (SurplusShortage(&p, &q, a, b, c, d)){ printf("%d人 分 %d颗 糖\\n", p, q);printf("%d - (%d * %d) = %d\\n", q, p, a, b);printf("%d - (%d * %d) = -%d\\...

简单C语言问题
简单C语言问题 程序:8.1对于求最大公约数用辗转相除法的疑问:书上是这样写了一个最大公约数的函数:inthcf(intu,intv){intt,r;if(v>u){t=u;u=v;v=t;}while((r=u%v)!=0){u=v;v=r;}return(v);}为什么...程序:8.1对于求最大公约数用辗转相除法的疑问:书上是这样写了一个最大公约数的...

问几个C语言scanf函数和printf函数问题?
在使用scanf()输入字母时,字母和字母之间不能有空格的(否则每二个字符就会读到空格,除非在格式串中也写明空格)。字母后面遇到数字可以用空格隔开,遇到字母不能用空格隔开的。scanf("%d%d",&x1,&x2);scanf("%c%c",&y1,&y2);正确的输入格式,答案是10空格20AB,但是这个答案不是唯一的。...

相似回答