ACM
- 格式:docx
- 大小:77.40 KB
- 文档页数:18
1002日历转换InputThe date in Haab is given in the following format:NumberOfTheDay. Month Year#include<iostream>#include<stdio.h>#include<string>using namespace std;int main(){int num,j;int day,year;char month[10];string Tzolkin[]={"imix","ik", "akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","c ib","caban","eznab", "canac","ahau"};string Haab[]={"pop","no","zip", "zotz","tzec","xul","yoxkin","mol", "chen", "yax", "zac", "ceh","mac","kankin", "muan","pax","koyab","cumhu","uayet"};cin >>num;cout << num<<endl;while(num >0){Scanf("%d.%s %d",&day,month,&year);//按格式输入,可以免除截取字符串猜得到相应的数据!!!!!比cin要简单好多!!!!for(j=0;j<19;j++)if(month==Haab[j])break;day = year*365+j*20+day;cout <<1+day%13<<" "<<Tzolkin[day%20]<<" "<<day/260 <<endl;num--;}return 0;}1004John’s trip//该代码记录的边,即g[x][v]=y表示点x通过v与y相连???#include <iostream>#include<stdio.h>#include <string.h>using namespace std;int path[2000],g[2000][2000],flag[2000],n,m,k;void dfs(int v) //深度遍历求欧拉回路无向图欧拉回路顶点的度数为偶数,有向图入度等于出度{int i;for(i=1;i<=m;i++){if(!flag[i]&&g[v][i]){flag[i]=1;dfs(g[v][i]);path[k++]=i;}}}int main(){int i;int x,y,z,start;while(cin>>x>>y&&(x||y)){memset(g,0,sizeof(g));//初始化,初始化为0 #include《string》memset(flag,0,sizeof(flag));memset(path,0,sizeof(path));k=n=m=0;//m为边数,n为顶点数start=2000;do{cin>>z;g[x][z]=y;g[y][z]=x;g[x][0]++;g[y][0]++;m=m<z?z:m;n=(x>y?x:y)>n?(x>y?x:y):n;start=(x<y?x:y)<start?(x<y?x:y):start;}while(cin>>x>>y&&(x||y));for(i=1;i<=n;i++){if(g[i][0]%2){printf("Round trip does not exist.\n");break;}}if(i==n+1){dfs(start);for(int j=k-1;j>=0;j--){printf("%d",path[j]);if(j!=0){printf(" ");}else{printf("\n");}}}}return 0;}1015.Gridland因为要遍历所有节点,而且最后回到起始节点,那所要经过的边的数目就是节点的数目m*n,问题的关键就是考虑m*n条边中有多少个斜边。
经过分析可以得出一条规律:当m或n都是偶数时没有斜边;否则会有一条斜边。
#include<iostream>#include<cmath>#include<iomanip>using namespace std;int main(){int cas,x,y,j;float N=0.00;cin>>cas;for(j=1;j<=cas;j++){cin>>x>>y;if(x%2==0||y%2==0)N=(float)x*y;elseN=(float)x*y-1+sqrt(2.0);cout<<"Scenario #"<<j<<":"<<endl;cout.setf(ios::showpoint);//设置输出格式!!!精确到两位小数点cout.precision(2);cout.setf(ios::fixed);cout<<N<<endl;}return 0;}1022.Packets题目大意:所有的箱子都是6*6尺寸的,但是物品有1*1,2*2,3*3,4*4,5*5以及6*6尺寸的,要求把所有的物品放进箱子中,求最少需要多少箱子。
题目思路,对于6*6,5*5以及4*4尺寸的物品每个物品需要占有一个箱子,对于3*3的物品一个箱子可以放4个,2*2的物品箱子可以放9个,1*1的可以放36个。
采用面积统计1*1箱子的空位,采用向上去整的方法统计箱子#include<iostream>#include<cstdio>#include<cstring>int num[4]={0,5,3,1};int box[7];int main(){//freopen("input.txt","r",stdin);while(1){int tmp=0;for(int i=1;i<=6;i++){scanf("%d",&box[i]); // 读入每个物品的数目tmp+=box[i];}if(tmp==0)break;int ans=box[6]+box[5]+box[4]+(box[3]+3)/4; //a6,a5,a4,每个物品占有一个箱子(a3 + 3 ) / 4 代表a3的物品需要占int a2=box[4]*5+num[box[3]%4]; //统计所有的大物品放进箱子中后a2物品的空位子有多少if(box[2]>a2)ans+=(box[2]-a2+8)/9;int a1=ans*36-box[6]*36-box[5]*25-box[4]*16-box[3]*9-box[2]*4;if(box[1]>a1) //求a1的空位子,只需要统计剩余的面积即可ans+=(box[1]-a1+35)/36;printf("%d\n",ans);}return0;}1031.LC-Display输出液晶数字#include<iostream>#include<string.h>#include<stdio.h>using namespace std;char h1[11]={"- -- -----"}; 按每一横行先写好,再根据大小开始输出char h2[11]={"| ||| ||"};char h3[11]={"||||| |||"};char h4[11]={" ----- --"};char h5[11]={"| | | | "};char h6[11]={"|| |||||||"};char h7[11]={"- -- -- --"};int main(){int s,x;int l,i,j,d,k;while(1){cin>>s>>x;if(s==0||s<0||s>10||x<0||x> 99999999)break;else{int str[20]={0};int flag=0;int y=x;int h;while(x){x/=10;flag++;}l=flag;while(y){h=y%10;y=(y-h)/10;str[--flag]=h;}for(i=0;i<l;i++){d=str[i];printf(" ");for(j=0;j<s;j++)printf("%c",h1[d]); printf(" ");}printf("\n");for(i=0;i<s;i++){for(j=0;j<l;j++){d=str[j];printf("%c",h2[d]);for(k=0;k<s;k++)printf(" ");printf("%c ",h3[d]); }printf("\n");}for(i=0;i<l;i++){printf(" ");d=str[i];for(j=0;j<s;j++)printf("%c",h4[d]); printf(" ");}printf("\n");for(i=0;i<s;i++) {for(j=0;j<l;j++){d=str[j];printf("%c",h5[d]);for(k=0;k<s;k++)printf(" ");printf("%c ",h6[d]);}printf("\n");}for(i=0;i<l;i++){printf(" ");d=str[i];for(j=0;j<s;j++)printf("%c",h7[d]);printf(" ");}printf("\n");// printf("\n");}}return 0;}1036.Rails判断出栈序列是否正确#include<stdio.h>int main(){int a[1005],b[1005],i,j,k,n;while(scanf("%d",&n),n){while(scanf("%d",&b[0]),b[0]){for(j=1; j<n; j++)scanf("%d",&b[j]);for(i=1,j=0,k=0; i<=n&&j<n; i++,k++) //j,k相当于指针,i 是应该进栈的数{a[k]=i;while(a[k]==b[j]){if(k>=0)k--;j++;if(k==-1)break;}}if(j==n)printf("Yes\n");else printf("No\n");}printf("\n");}}1065.Factorial求N的阶乘末尾有多少个0解法一:首先,最直接的算法当然是直接求出来N!然后看末尾有几个0就行了。