数气球
思路
建立两个数组,一个字符串数组和一个记录次数的数组
经比较后重复颜色时在次数数组上相应位置+1
遇到问题
二维字符数组
由于字符串学的属实太拉,开始没定义二维字符数组。
上图助于理解。
strcmp函数
strcmp函数用法的巩固
初始化问题
每次这种多段输入问题都会忘记变量的初始化,无语。
切记初始化!!!
memset函数
学到了初始化数组的便利函数memset
源代码
#include <stdio.h>
#include <string.h>
#define N 1002
int main()
{
char col[N][20];
int a[N],i,j,n,max_a,max;
while(scanf("%d",&n) && n!=0)
{
memset(a,0,N);
max = 0;
for(i=0; i<n; i++)
{
scanf("%s",col[i]);
}
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(strcmp(col[i],col[j])==0)
a[i]++;
}
}
for(i=0; i<n; i++)
{
if(a[i]>max)
{
max = a[i];
max_a = i;
}
}
printf("%s\n",col[max_a]);
}
return 0;
}
前缀和与差分
基本原理
前缀和
差分
差分后利用前缀和即可还原差分后的数组
#include <stdio.h>
#define N 10000
int main()
{
int arr[N],d[N],i,n,v,l,r;
printf("请输入数组长度为:\n");
scanf("%d",&n);
printf("请依次输入数组元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
printf("请输入操作区间为:\n");
scanf("%d %d",&l,&r);
printf("请输入操作值为:\n");
scanf("%d",&v);
d[l] += v;
d[r+1] -= v;
for(i=1;i<n;i++)d[i]+=d[i-1];
for(i=0;i<n;i++)
{
arr[i] += d[i];
if(i==0)printf("%d",arr[i]);
else printf(" %d",arr[i]);
}
memset(d,0,n);
return 0;
}
程序运行结果