返回信息流#include<stdio.h><br>#include<stdlib.h><br>#include<string.h><br>struct rizhi{<br> int time1;<br> int time2;<br> int time3;<br> char name[15];<br> char log[6];<br>};<br><br>int main(){<br> int n;<br> scanf("%d",&n);<br> char operation[6]="LOGIN";<br> struct rizhi *user=NULL;<br> struct rizhi *temp=(struct rizhi *)malloc(n*sizeof(struct rizhi));<br> int m=0,find,update;<br> int num[100];<br> for(int i=0;i<n;i++){<br> find=0;<br> update=1;<br> scanf("%d %d %d %s %s",&temp[i].time1,&temp[i].time2,&temp[i].time3,temp[i].name,temp[i].log);<br> for(int j=0;j<m;j++){<br> if(strcmp(temp[i].name,user[j].name)==0&&strcmp(temp[i].log,operation)==0){<br> find=1;<br> if(temp[i].time1<user[j].time1){<br> update=0;<br> }else if(temp[i].time1==user[j].time1){<br> if(temp[i].time2<user[j].time2){<br> update=0;<br> }else if(temp[i].time2==user[j].time2){<br> if(temp[i].time3<user[j].time3){<br> update=0;<br> }<br> }<br> }<br> if(update){<br> user[j].time1=temp[i].time1;<br> user[j].time2=temp[i].time2;<br> user[j].time3=temp[i].time3;<br> }<br> num[j]++;<br> break;<br> }<br> }<br> if(!find&&strcmp(temp[i].log,operation)==0){<br> user=(struct rizhi *)realloc(user,(m+1)*sizeof(struct rizhi));<br> user[m]=temp[i];<br> num[m]=1;<br> m++;<br> }<br> }<br> for(int i=0;i<m-1;i++){<br> for(int j=0;j<m-1-j;j++){<br> if(num[j]<num[j+1]){<br> int p=num[j];<br> num[j]=num[j+1];<br> num[j+1]=p;<br> struct rizhi copy=user[j];<br> user[j]=user[j+1];<br> user[j+1]=copy;<br> }else if(num[j]==num[j+1]){<br> if(strcmp(user[j].name,user[j+1].name)>0){<br> struct rizhi copy=user[j];<br> user[j]=user[j+1];<br> user[j+1]=copy;<br> }<br> }<br> }<br> }<br> for(int i=0;i<m;i++){<br> printf("%s %d %d %d %d",user[i].name,num[i],user[i].time1,user[i].time2,user[i].time3);<br> printf("\n");<br> }<br> free(temp);<br> free(user);<br> return 0;<br>}这是我写的
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #7948427同步于 2024/12/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
小登求问一道c语言题目
IWhisper#205
2024/12/26镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
某网站当天日志文件由5个字段组成,以空格分隔,格式为:“时 分 秒 用户名 操作”,其中“时分秒”均为整数,“用户名”为字符串(长度小于15),“操作”为“LOGIN”和”LOGOUT”两个大写字符串。举例如下:<br><br>11 23 59 tom LOGIN<br>12 24 39 tom LOGOUT<br><br>请统计当天用户登录次数排名(从大到小)。<br><br>输入格式:<br>第一行为一个整数n(0<n<500,用户总数不大于100),代表记录总数,后边n行,每行均符合以上日志记录格式。<br><br>测试用例保证合法,且所有整数均可以用int存储。。<br><br>输出格式:<br>按用户登录次数“从大到小”排名的记录,共m行,每行格式为 “用户名 登录次数 最后一次登录时间(时 分 秒)”。如果两个用户登录次数一样,则用户名字符串小的排前面。<br>这是题目
#include<stdio.h><br>#include<stdlib.h><br>#include<string.h><br>struct rizhi{<br> int time1;<br> int time2;<br> int time3;<br> char name[15];<br> char log[6];<br>};<br><br>int main(){<br> int n;<br> scanf("%d",&n);<br> char operation[6]="LOGIN";<br> struct rizhi *user=NULL;<br> struct rizhi *temp=(struct rizhi *)malloc(n*sizeof(struct rizhi));<br> int m=0,find,update;<br> int num[100];<br> for(int i=0;i<n;i++){<br> find=0;<br> update=1;<br> scanf("%d %d %d %s %s",&temp[i].time1,&temp[i].time2,&temp[i].time3,temp[i].name,temp[i].log);<br> for(int j=0;j<m;j++){<br> if(strcmp(temp[i].name,user[j].name)==0&&strcmp(temp[i].log,operation)==0){<br> find=1;<br> if(temp[i].time1<user[j].time1){<br> update=0;<br> }else if(temp[i].time1==user[j].time1){<br> if(temp[i].time2<user[j].time2){<br> update=0;<br> }else if(temp[i].time2==user[j].time2){<br> if(temp[i].time3<user[j].time3){<br> update=0;<br> }<br> }<br> }<br> if(update){<br> user[j].time1=temp[i].time1;<br> user[j].time2=temp[i].time2;<br> user[j].time3=temp[i].time3;<br> }<br> num[j]++;<br> break;<br> }<br> }<br> if(!find&&strcmp(temp[i].log,operation)==0){<br> user=(struct rizhi *)realloc(user,(m+1)*sizeof(struct rizhi));<br> user[m]=temp[i];<br> num[m]=1;<br> m++;<br> }<br> }<br> for(int i=0;i<m-1;i++){<br> for(int j=0;j<m-1-j;j++){<br> if(num[j]<num[j+1]){<br> int p=num[j];<br> num[j]=num[j+1];<br> num[j+1]=p;<br> struct rizhi copy=user[j];<br> user[j]=user[j+1];<br> user[j+1]=copy;<br> }else if(num[j]==num[j+1]){<br> if(strcmp(user[j].name,user[j+1].name)>0){<br> struct rizhi copy=user[j];<br> user[j]=user[j+1];<br> user[j+1]=copy;<br> }<br> }<br> }<br> }<br> for(int i=0;i<m;i++){<br> printf("%s %d %d %d %d",user[i].name,num[i],user[i].time1,user[i].time2,user[i].time3);<br> printf("\n");<br> }<br> free(temp);<br> free(user);<br> return 0;<br>}这是我写的
我趣 <br>【 在 xuzhiyu 的大作中提到: 】<br><font class="f006">: 你冒泡排序的时候j<m-1-j应该是j<m-1-i </font><br>:
感谢感谢,我年纪轻轻眼睛就不好,看好几遍没看出来<img src="/img/ubb/ema/1.gif" alt="ema1" style="display:inline;border-style:none"><br>【 在 xuzhiyu 的大作中提到: 】<br><font class="f006">: 你冒泡排序的时候j<m-1-j应该是j<m-1-i </font>