第一行输入一个整数
代表候选人数。
第二行输入
个长度为
、仅由大写字母构成的字符串
,代表候选人的名字。保证候选人的名字互不相同。
第三行输入一个整数
代表投票人数。
第四行输入
个长度为
、仅由大写字母构成的字符串
,代表投票内容。
对于每一位候选人,新起一行。先输出其名字,随后输出一个空格、一个冒号、一个空格作为间隔,最后输出其获得的票数。形如
,其中
是候选人的名字,
是候选人的票数。
最后一行以相同的格式输出无效票的数量。形如
,其中
是无效票的数量。
4 A B C D 8 A D E CF A GG A B
A : 3 B : 1 C : 0 D : 1 Invalid : 3
在这个样例中,
三张票是无效的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef struct statistic {
char name[20];
int votes;
} statistic ;
void function(int candidates, statistic name_votes[], int people, char ticket[]);
int main() {
int candidates = 0, people = 0, i = 0; //candidates候选人数量,people投票人人数
char ticket[1000]; //存储所有投票结果,未单独存储每一种票选结果,故计票数组长度设置尽可能长
statistic name_votes[MAX]; //定义候选人+票数的结构体数组
scanf("%d", &candidates); //第一行输入candidates候选人数
//初始化结构体数组
for (i = 0; i < MAX; i++) {
memset(name_votes[i].name, '\0', sizeof(name_votes[i].name));
name_votes[i].votes = 0;
}
//第二行输入n个候选人的名字(均为大写字母的字符串)
for (i = 0; i < candidates; i++) {
scanf("%s", name_votes[i].name);
name_votes[i].votes = 0;
}
scanf("%d", &people); //第三行输入投票人数
scanf(" %[^\n]s", ticket); //第四行输入投票
function(candidates, name_votes, people, ticket);
return 0;
}
/*
* 功能:统计票选结果
* 参数:candidates候选人数量, name:n个候选人的名字, people投票人数, ticket投票具体情况
*/
void function(int candidates, statistic name_votes[], int people, char ticket[]) {
if(candidates < 1 || candidates > 100)
exit(-1);
if(strlen(ticket) < 1 || strlen(ticket) > 1000)
exit(-1);
int i = 0, j = 0, invalid_votes = 0;
char *token = NULL;
token = strtok(ticket, " ");
while(token != NULL){
int flag = 0;
for (j = 0; j < candidates; j++) {
// 若候选人名字在每一个具体投票里,则计数+1
if (strcmp(token, name_votes[j].name) == 0) {
name_votes[j].votes++;
flag = 1;
break;
}
}
if (!flag) {
invalid_votes++; // 无效投票
}
token = strtok(NULL, " "); // 获取下一个投票
}
for(i=0; i < candidates; i++){
printf("%s : %d\n", name_votes[i].name, name_votes[i].votes);
}
printf("Invalid : %d", invalid_votes);
}
#include <stdio.h>
#include <string.h>
int main() {
int n=0;
scanf("%d", &n);
char name[100][50]={0};
for(int i=0; i<n; i++)
scanf("%s", name[i]);
int votenum=0;
scanf("%d", &votenum);
char temp[50];
int num[100]={0},invalid=0,flag = 0;
for(int i=0; i<votenum; i++)
{
memset(temp, 0, 50*sizeof(char));
scanf("%s", temp);
for(int j=0; j<n; j++)
{
if(!strcmp(temp, name[j])){
num[j]++;
flag = 1;
break;
}
}
if(flag == 0)
invalid++;
flag = 0;
}
for(int i=0; i<n; i++)
{
printf("%s : %d\n", name[i], num[i]);
}
printf("Invalid : %d", invalid);
return 0;
} #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int a, b;
int invalidcnt=0;
scanf("%d",&a);
int cnt[a];
char *A[a+1];
for(int i=0;i<a;i++)
{
cnt[i]=0;
A[i]=(char*)malloc(sizeof(char)*100);
scanf("%s",A[i]);
}
scanf("%d",&b);
char *B[b+1];
for(int i=0;i<b;i++)
{
B[i]=(char*)malloc(sizeof(char)*100);
scanf("%s",B[i]);
}
for(int i=0;i<b;i++)
{
int valid=0;
for(int j=0;j<a;j++)
{
if(!strcmp(B[i], A[j]))
{
//printf("%s 有效\n",B[i]);
valid=1;
cnt[j]++;
break;
}
}
if(valid==0)
invalidcnt++;
}
for(int i=0;i<a;i++)
{
printf("%s : %d\n",A[i],cnt[i]);
}
printf("Invalid : %d",invalidcnt);
return 0;
} #include <stdio.h>
#include <stdlib.h>
typedef struct candidate{
char name[15];
} cdd;
int trans(char *a){
int sum=0,i;
for(i=0;a[i]!='\0';i++){
sum+=a[i];
}
return sum;
}
int main() {
int n,i,m,invalid=0; //n个候选人,m张票
scanf("%d",&n);
cdd a[100];
int hash[1000]={0};
for(i=0;i<n;i++){
scanf("%s",a[i].name);
hash[trans(a[i].name)]=1;
}
scanf("%d",&m);
char vote[13];
for(i=0;i<m;i++){
scanf("%s",vote);
int s=trans(vote);
if(hash[s]==0) invalid++;
else hash[s]++;
}
for(i=0;i<n;i++){
printf("%s : %d\n",a[i].name,hash[trans(a[i].name)]-1);
}
printf("Invalid : %d\n",invalid);
return 0;
}
使用哈希函数,时间复杂度O(n)。 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct people{
char* name;
int ticket;
struct people* next;
};
//使用链表的形式存储候选人
int main() {
int n, m, invaild = 0;
struct people head; //创建链表头
char name[100];
struct people* cur = &head; //链表当前指针
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%s", name); //获取候选人名字
struct people *tmp = (struct people*)malloc(sizeof(struct people)); //动态申请节点
tmp->name = (char*)malloc(sizeof(char)*100); //为节点的候选人名称申请空间
strcpy(tmp->name, name); //候选人名称赋值
tmp->ticket = 0, tmp->next = NULL; //初始节点
cur->next = tmp; //将新节点加入链表
cur = cur->next;
}
scanf("%d", &m);
for(int i=0; i<m; i++){
scanf("%s", name); //获取投票信息
cur = head.next; //cur指向链表第一个节点
while(cur){ //遍历链表
if(strcmp(name, cur->name) == 0){//找到对应的候选人,
cur->ticket++; //票数加1
break; //跳出循环
}
cur = cur->next;
}
if(!cur)invaild++; //找不到对应候选人,不合法票数+1
}
cur = head.next;
for(int i=0; i<n; i++){
printf("%s : %d\n", cur->name, cur->ticket);
cur = cur->next;
}
printf("Invalid : %d", invaild);
return 0;
} #include <stdio.h>
#include <string.h>
#define N 100
int main()
{
char str[N][N],temp[N];
int peo,vote,i,j,arr[N]={0};
scanf("%d",&peo);
for(i=0;i<peo;i++)
{
scanf("%s",str[i]);
}
scanf("%d",&vote);
for(i=0;i<vote;i++)
{
scanf("%s",temp);
for(j=0;j<peo;j++)
{
if(!strcmp(str[j],temp))
{
arr[j]++;
break;
}
}
if(j==peo)
arr[peo]++;
}
for(i=0;i<peo;i++)
{
printf("%s : %d\n",str[i],arr[i]);
}
printf("Invalid : %d\n",arr[peo]);
return 0;
} #include<stdio.h>
#include<string.h>
typedef struct table
{
char name[10];
int count;
}name;
int main(){
int candidate_number;
while(scanf("%d",&candidate_number)!=EOF){
name candidate[candidate_number];
for(int i=0;i<candidate_number;i++){
scanf("%s",candidate[i].name);
candidate[i].count=0;
}
int vote_number;
scanf("%d",&vote_number);
name vote[vote_number];
for(int i=0;i<vote_number;i++){
scanf("%s",vote[i].name);
vote[i].count=0;
}
int Invalid=vote_number;
for(int i=0;i<candidate_number;i++){
for(int j=0;j<vote_number;j++){
if(strcmp(candidate[i].name,vote[j].name)==0){
candidate[i].count++;
Invalid--;
}
}
}
for(int i=0;i<candidate_number;i++){
printf("%s : %d\n",candidate[i].name,candidate[i].count);
}
printf("Invalid : %d\n",Invalid);
}
return 0;
} #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char name[30];
int cnt;
}ele;
ele arr[100] = {0};
int num = 0;
void add_ele(char* n)
{
strcpy(arr[num++].name,n);
}
int add_cnt(char* name)
{
int i;
for(i=0;i<num;i++)
{
if(!strcmp(name,arr[i].name))
{
arr[i].cnt++;
return 0;
}
}
return 1;
}
void reset_all()
{
num = 0;
memset(arr,0,sizeof(arr));
}
void print_cnt(int e)
{
int i;
for(i=0;i<num;i++)
{
printf("%s : %d\n",arr[i].name,arr[i].cnt);
}
printf("Invalid : %d\n",e);
reset_all();
return;
}
int main()
{
char name[30]={0};
int n,i,e;
reset_all();
while(scanf("%d",&n)!=EOF)
{
e = 0;
for(i=0;i<n;i++)
{
scanf("%s\n", name);
add_ele(name);
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s\n", name);
e+=add_cnt(name);
}
print_cnt(e);
}
} // hash
#include <stdio.h>
typedef struct {
char *name;
int count;
} Vote;
Vote g_vote[100];
int g_index;
int GetIndex(char *name) {
for (int i = 0; i < sizeof(g_vote) / sizeof(Vote); i++) {
if (g_vote[i].name != NULL && strcmp(name, g_vote[i].name) == 0) {
return i;
}
}
return -1;
}
int InsertVote(char *name)
{
int i = GetIndex(name);
if (i >= 0) {
g_vote[i].count++;
return 0;
}
return -1;
}
void InsertName(char *name)
{
g_vote[g_index].name = name;
g_vote[g_index].count = 0;
g_index++;
}
int main(void)
{
int n = 0;
while (scanf("%d", &n) != EOF) {
g_index = 0;
memset(g_vote, 0, sizeof(g_vote));
char name[50] = {'\0'};
for (int i = 0; i < n; i++) {
scanf("%s", name);
char *tmp = (char *)malloc(sizeof(char) * (strlen(name) + 1));
strncpy(tmp, name, strlen(name) + 1);
InsertName(tmp);
}
int can = 0;
int invalid = 0;
scanf("%d", &can);
for (int i = 0; i < can; i++) {
scanf("%s", name);
if (InsertVote(name) != 0) {
invalid++;
}
}
for (int i = 0; i < g_index; i++) {
printf("%s : %d\n", g_vote[i].name, g_vote[i].count);
}
printf("Invalid : %d\n", invalid);
}
} #include "stdio.h"
#include "string.h"
int main()
{
int n,N,k;
char str1[1000] = {0};
int MatchFlag = 0;
while(scanf("%d", &n) != EOF)
{
char str_temp[100] = {0};
char str2[100] = {0};
int vote[100] = {0};
int object = 0;
int Invalid = 0;
getchar();
memset(str1,0,sizeof(str1));
scanf("%[^\n]", str1);//只有%s才会自动在末尾加入终止符\0,故这里没有终止符,会被上一次脏数据影响。
scanf("%d", &N);
//getchar();
for(int i=0; i<N; i++)
{
scanf("%s", str2);
object = 0;
MatchFlag = 0;
for(int j=0; str1[j] != '\0'; j++)
{
k=0;
memset(str_temp,0,sizeof(str_temp));
while(str1[j] != ' ' && str1[j] != '\0')
{
str_temp[k] = str1[j];
k++, j++;
}
if(strcmp(str_temp,str2) == 0)
{
vote[object]++;
MatchFlag = 1;
break;
}
else
object++;
}
if(!MatchFlag)
Invalid++;
}
object = 0;
for(int j=0; str1[j] != '\0'; j++)
{
k=0;
memset(str_temp,0,sizeof(str_temp));
while(str1[j] != ' ' && str1[j] != '\0')
{
str_temp[k] = str1[j];
k++, j++;
}
printf("%s : %d\r\n", str_temp, vote[object]);
object++;
}
printf("Invalid : %d\r\n", Invalid);
}
return 0;
} #include <stdio.h>
//#include <malloc.h>
//#include <string.h>
#include <stdlib.h>
//#define MAX_LEN 20
int main(void){
int n = 0;//候选人数
while(scanf("%d",&n)!=EOF){
//scanf("%d",&n)!=EOF;//输入候选人数;
char names[100][20] ;
char name[20] = {'0'};
//char EmptyName[MAX_LEN] = {'\0'};
int votes[100] = {0};
int invalidCount = 0 ;
int total = 0;
for(int i = 0; i < n; i++){
scanf("%s",names[i]);
}//输入候选人名;
scanf("%d",&total);
for(int i = 0; i < total;i++){
//strcpy(name,EmptyName);
memset(name,0,20);
scanf("%s",name);
for(int j=0;j<n;j++){
if(0==strcmp(name,names[j])){
votes[j]++;
break;
}
if(j==n-1){
invalidCount ++;
//printf("i = %d,j= %d,invalid = %d\n",i,j,invalidCount);
}
}
}
for(int i=0;i<n;i++){
printf("%s : %d\n",names[i],votes[i]);
}
printf("Invalid : %d\n",invalidCount);
}
return 0;
}