多组数据输入输出测试:
输入:输入包括多组测试数据。每组数据包括一行,给出2到15个两两不同且范围在[0,100)的正整数。每一行后面最后一个数是0,表示这一行的结束。输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。
输出:对每组输入数据,输出一行,给出有多少个数满足其中一个数是另一个数的两倍。
代码:
#include<iostream>
using namespace std;
int main()
{
int i,j,n,count,a[20]; //声明整型变量i,j,n,count和整数数组a
cin>>a[0]; //输入第一组数据的首个元素
while(a[0]!=-1) //判断首个数据是否为停止条件
{
n = 1;
for( ; ;n++)
{
cin>>a[n];
if(a[n]==0) break; //break跳出循环继续向下执行
}
count = 0; //满足条件的对数count
for(i = 0;i<n-1;i++) //0到n-2,除去0元素和倒数第二个
{
for(j=i+1;j<n;j++) //从i的下一个即j开始检查一直到n的前一个,n-1(除0)
{
if(a[i]*2 == a[j] || a[j]*2 == a[i])
count++; //满足条件累计对数
}
}
cout<<count<<endl;
cin>>a[0]; //下一步输入首元素,用于判断
}
return 0;
}
循环条件分析:第一重循环从第一个元素开始(i=0),逐一向后检查,注意这里最后一个元素“0”(下标为n)不用检查,直到n-2。第一重的循环的每一个元素都要和其后的每一个元素进行判断,所以第二重循环从 j = i+1 开始,一直到倒数第一个(下标为n-1)。因为第一重循环需要和其后的元素进行判断比较,所以第一重循环的结束条件就是n-2。因为是前后比较的,终止条件设为n-2就可以与内循环中最后一个元素n-1进行比较了,以后的前后循环比较会经常用到这种思维方式。
判断条件分析:while(a[0]!=-1),可以看到进入循环之前就已经输入了cin>>a[0],那么a[0]的值必须在循环内进行修改(对于我这种菜鸟来说,这种设计方式我是有必要记录一下的),同时注意因为cin>>a[0],所以n从1开始。
调试结果:
参考:《数据结构编程实验》吴永辉 王建德 编著