FJUT ACM 1868 数组标记法
找出单身狗
TimeLimit:1000MS MemoryLimit:128MB
64-bit integer IO format:%lld
Problem Description
情人节的时候,情侣们在一起开了个party,可是这个party混进了一个单身狗,于是大家决定找出这个单身狗, 已知,到场的每个人身上都有一个标号,这个标号是一个正整数,每个人的标号不是唯一的,但是情侣拥有的 标号是一样的,给你所有人无序的标号,请你找出那只单身狗的标号。 第一题的大致格式: #include < stdio.h > int main() { int N,i; while(scanf("%d",&N)!=EOF){ for(i=0;i < N;i++){输入N个数 scanf(输入第i个数字); } .... printf(答案); } return 0; }
Input
第一行为一个奇数N(2 < n < 202),表示到场的人数; 第二行有N个整数(0 < N < = 100)第i个数表示第i个人的标号。
Output
对于每组测试案例,每一行输出该单身狗的标号。
SampleInput
3 1 1 3 5 1 1 1 1 1 5 1 2 1 2 3
SampleOutput
3 1 3
这题可以使用数组标记法,来ac
什么是数组标记法呢?数组标记法,就是使用数组的特性去标记,
比如上题,就是要求找到单身狗,我们可以把数组的值初始化为0,然后把a【i】++;
最后再用一个for循环去判断输出!
举个例子
1 1 2 2 3
对应的过程就是
a[1]++;
a[1]++;
a[2]++;
a[2]++;
a[3]++;
对应的值就为
a[1]=2;
a[2]=2;
a[3]=1;
那我们写个for循环的
如果a[i]%2==0那么不输出
否则就输出
printf("%d",i);
简单的来讲,就是用i的值来标记,用a[i]的值来统计出现次数,
充分使用了,数组的前标的特点!
附上代码:
#include<stdio.h> #include<string.h> int x[101]; int main() { int n,i,y,z; while(scanf("%d",&n)!=EOF) {memset(x,0,sizeof(x)); z=0; for(i=0;i<n;i++) { scanf("%d",&y); x[y]++; } for(i=0;i<101;i++) { if(x[i]!=0&&x[i]%2!=0)printf("%d\n",i); } } return 0; }