Day 16 算法笔记之算法初步4.1 排序(3)
2021/9/27 22:40:44
本文主要是介绍Day 16 算法笔记之算法初步4.1 排序(3),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
1.Phone Bills
1.Phone Bills
从构思到写完,总共约3小时,我太弱鸡了,淦
#include <cstdio> #include <cctype> #include <cstring> #include <math.h> #include <algorithm> using namespace std; struct record{ char name[22]; int date[4]; char status[10]; int flag = -1; int status_temp=0; int use = -1; double sum=0; int min=0; }rec[1002]; bool cmp(record a,record b){ if(strcmp(a.name,b.name)!=0){ return strcmp(a.name,b.name)<0; }else if(a.date[1]!=b.date[1]){ return a.date[1]<b.date[1]; }else if(a.date[2]!=b.date[2]){ return a.date[2]<b.date[2]; }else if(a.date[3]!=b.date[3]){ return a.date[3]<b.date[3]; } } int main(){ int cha[26]; for(int i=0;i<24;i++){ scanf("%d",&cha[i]); } int num; scanf("%d",&num); for(int i=0;i<num;i++){ scanf("%s %d:%d:%d:%d %s",&rec[i].name,&rec[i].date[0],&rec[i].date[1],&rec[i].date[2],&rec[i].date[3],&rec[i].status); if(rec[i].status[1]=='n'){ rec[i].status_temp=1; }else{ rec[i].status_temp=-1; } } sort(rec,rec+num,cmp); for(int i=0;i<num;i++){ if(rec[i].flag==-1){ for(int j=i+1;j<num;j++){ if(rec[j].flag==-1){ if(rec[i].status_temp==rec[j].status_temp){ break; } if((strcmp(rec[i].name,rec[j].name)==0)&&(rec[i].status_temp!=rec[j].status_temp)){ rec[i].flag = j; rec[j].flag = i; break; } } } } } int cou[1002]={0}; int n=0,pos=0; int xx[1000]={0},l=1; for(int i=0;i<num;i++){ if((rec[i].use==-1)&&(rec[i].flag!=-1)){ if(strcmp(rec[i].name,rec[n].name)!=0){ xx[l] = i; l+=1; n=i; pos++; cou[pos]+=1; }else{ cou[pos]+=1; } rec[i].use=1; rec[rec[i].flag].use=2; int d1=rec[i].date[1],h1=rec[i].date[2],m1=rec[i].date[3]; int d2=rec[rec[i].flag].date[1],h2=rec[rec[i].flag].date[2],m2=rec[rec[i].flag].date[3]; int time[25]={0}; while(d1!=d2||h1!=h2||m1!=m2){ m1++; time[h1]+=1; if(m1==60){ h1+=1; m1=0; } if(h1==24){ h1=0; d1+=1; } } for(int j=0;j<24;j++){ rec[i].min+=time[j]; rec[i].sum+=time[j]*cha[j]; } rec[i].sum/=100; } } for(int i=0;i<pos+1;i++){ double whole_sum = 0; int n = 0; printf("%s %02d\n",rec[xx[i]].name,rec[xx[i]].date[0]); for(int j = xx[i];j<num;j++){ if(rec[j].use==1){ n++; printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n",rec[j].date[1],rec[j].date[2],rec[j].date[3],rec[rec[j].flag].date[1],rec[rec[j].flag].date[2],rec[rec[j].flag].date[3],rec[j].min,rec[j].sum); whole_sum+=rec[j].sum; } if(n==cou[i]){ break; } } printf("Total amount: $%.2f\n",whole_sum); } return 0; }
这篇关于Day 16 算法笔记之算法初步4.1 排序(3)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现