超星学习通题
题目名称:n倍数关系
题目描述:
给定若干不完全相同的正整数(<10000)和n(n<5),计算这些正整数里面有多少数对满足:其中一个是另一个的n倍。例如:1 4 3 2 9 7 18 22,n=3时得到的答案是2;因为3是1的3倍,9是3的3倍。
输入:输入第一行给出正整数n的值,接下来包括多组测试数据。每组数据最多100个整数占用一行,以数字0结束(不计入100个整数里)。测试数据不超过20组,最后一行只包括-1,表示输入数据结束。
输出:对每组输入数据,输出一行,给出有多少数对满足其中一个是另一个n倍。(注:最后一行末尾无换行符等多余字符。)
样例:
输入: 2 1 4 3 2 9 7 18 22 0 2 4 8 10 0 7 5 11 13 1 3 0 -1
输出: 3 2 0
以下是本人代码,do-while是本文章亮点所在
#include<stdio.h>
int judge(int s,int t,int n)//判断是否满足倍数关系
{
int f=0;
if(s/t==n&&s%t==0||t/s==n&&t%s==0)
f=1;
return f;
}
int out(int a[],int n)//对每一组进行判断输出
{
int counter=0;
int i=0,j;
while(a[i])
{
j=i+1;
while(a[j])
{
if(judge(a[i],a[j],n))
counter++;
j++;
}
i++;
}
return counter;
}
int main()
{
int n,flag=1,c;
scanf("%d",&n);
int a[101];
while(1)//难点,怎么让-1停止输出;
{
c=0;//关键,如果不让C重新回去,下面的break就没有意义了。
do{
scanf("%d",&a[c]);
if(c==0&&a[0]==-1) break;
c++;
}
while(a[c-1]!=0);
if(a[0]==-1) break;
if(flag) {flag=0;}
else {printf("\n");}
printf("%d",out(a,n));
}
return 0;
}