题解 | #合并表记录#
合并表记录
http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
思路:
(1)n最大是500,故,准备 index[500]={0},value[500]={0},n 。 输入数据
(2) 对 index[0] - index[n-1] 进行由小到大排序,value[0] - value[n-1] 做相同移动
(3) 遍历 index [ 0 ]到 index [n-1] 。
for(i=0;i<n;i++)
for(j=i+1;j<n+1;j++) // 不要忘记 index[ n-1 ] 要和 index[ n ]比较。
sum=value[i]
若 index[i] 和 index[i+1] index[i+2] … index[i+j] 相等,sum=sum + value[i+1] + value[i+2] + … + value[i+j]
当 index[i] 不等于 index[j] 时,输出 index[ j-1] 和 sum 。跳出 j 循环。进入 i 循环。
下一个 i 循环 从 新一组 index 元素开始。
程序:
# include <stdio.h>
# define N 11111111
int main ()
{
int index[500]={0},value[500]={0},n;
while(scanf("%d",&n)>0)
{
int i;
for(i=0;i<n;i++)
scanf("%d %d",&index[i],&value[i]);
//从小到大对index排序,value一起移动
int bigger_index=0,suixing_value=0,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(index[j]<index[i])
{
//交换位置
bigger_index=index[i];
index[i]=index[j];
index[j]=bigger_index;
//value交换相同的位置
suixing_value=value[i];
value[i]=value[j];
value[j]= suixing_value;
}
}
}
//遍历index[0]到index[n-1].若index[i]和index[i+1]相等,sum=value[i]+value[i+1].然后输出i和sum
int sum=0;
for(i=0;i<n;i++)
{
sum=value[i];
for(j=i+1;j<n+1;j++)
{
if(index[i]==index[j])
sum=sum+value[j];
else
{
printf("%d %d\n",index[j-1],sum);
break;
}
}
i=j-1; // 下一个 i 循环 从 新一组 index 元素开始。
}
}
}
# define N 11111111
int main ()
{
int index[500]={0},value[500]={0},n;
while(scanf("%d",&n)>0)
{
int i;
for(i=0;i<n;i++)
scanf("%d %d",&index[i],&value[i]);
//从小到大对index排序,value一起移动
int bigger_index=0,suixing_value=0,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(index[j]<index[i])
{
//交换位置
bigger_index=index[i];
index[i]=index[j];
index[j]=bigger_index;
//value交换相同的位置
suixing_value=value[i];
value[i]=value[j];
value[j]= suixing_value;
}
}
}
//遍历index[0]到index[n-1].若index[i]和index[i+1]相等,sum=value[i]+value[i+1].然后输出i和sum
int sum=0;
for(i=0;i<n;i++)
{
sum=value[i];
for(j=i+1;j<n+1;j++)
{
if(index[i]==index[j])
sum=sum+value[j];
else
{
printf("%d %d\n",index[j-1],sum);
break;
}
}
i=j-1; // 下一个 i 循环 从 新一组 index 元素开始。
}
}
}