小明每周都要开车陪女朋友去商业街购物,商业街是一条笔直的大街,我们把它抽象成是X轴上的一条线段,街上的每个商铺都位于线段上整数点的位置,而顾客可以在线段上的任何一个位置停车,并且每停一次车都需要交一次费用。于是小明想知道如果自己就停一次车,然后步行去之前计划好要去的那些商铺,最后回到停车的位置,那么最短的步行路程是多少。
输入的第一行为一个整数t(1<=t<=100),表示测试样例的组数。
接下来输入t组样例,每组输入占两行,第一行输入一个整数n(1<=n<=20),表示小明他们计划要去的商铺的个数,第二行输入n个整数,表示计划要去的那些商铺的位置,位置范围为[0,99]。
对于每组输入,输出题目要求的最短的步行路程。
2
4
24 13 89 37
6
7 30 41 14 39 42
152
70
code:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; int main() { int cas; cin>>cas; int num[10000]; while(cas--) { int n; cin>>n; memset(num,0,sizeof(num)); for(int i=0;i<n;i++) { cin>>num[i]; } sort(num,num+n); //int p=0; cout<<(num[n-1]-num[0])*2<<endl;; } return 0; }
小明是学校电子竞技协会的会长,他想过一段时间组织一次协会内部的电子竞技比赛。但是为了让会员们能够尽量与自己实力相当的人比赛,小明决定将会员们按照当前的会员积分分成若干组,分组的方法如下:
对于一个会员,如果他的积分小于等于10,则分到“1”组;
如果积分大于10小于等于100,则分到最近的整十数组或“100”组,例如,积分为14的会员分到“10”组,积分为15的会员分到“20”组,积分为99的会员分到“100”组;
如果积分大于100小于等于1000,则分到最近的整百数组或“1000”组;
如果积分大于1000小于等于10000,则分到最近的整千数组或“10000”组;
具体例子请参考输入输出样例。
输入的第一行为一个整数n(1<=n<=100),表示测试数据的组数。
接下来n行,每行输入一个整数x(0<=x<=99999999),表示一个会员的积分。
对于每个输入的会员积分,输出该会员被分到的组。
9
15
14
4
5
99
12345678
44444445
1445
446
20
10
1
1
100
10000000
50000000
2000
500
code:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; int main() { int n; int cas; cin>>cas; while (cas--) { cin>>n; if (n<=10) { cout<<1<<endl; } else if (n==100) cout<<100<<endl; else if (n>=10&&n<=100) { if (n%10>=5) { cout<<(n/10+1)*10<<endl; } else cout<<n/10*10<<endl; } else { int countn=0; while (n/10) { if (n%10>=5) n=n/10+1; else n=n/10; countn++; } for (int i=1;i<=countn;i++) { n=n*10; } cout<<n<<endl; } } return 0; } /* 9 15 14 4 5 99 12345678 44444445 1445 446 */
前不久小明所在的班级为了庆祝在运动会上夺得第一名,开了一场班级聚会。在聚会上大家玩了这样一个游戏:
在地上放一个圆形硬纸片,然后参加游戏的人手里拿一个尺寸随机的圆形硬纸片,向地上的硬纸片扔过去,如果两个圆形硬纸片有相交的部分,则可以获得一次抽奖的机会。
现在,告诉你两个圆形硬纸片的圆心坐标和半径长度,请你计算它们相交的面积。
输入包含多组测试数据。
每组输入为一行,输入6个实数x1,y1,r1,x2,y2,r2(-1000<=x1,y1,x2,y2<=1000,0<r1,r2<=1000),表示两个圆形硬纸片的圆心坐标和半径长度。
对于每组输入,输出两个圆形硬纸片的相交面积,结果保留3位小数。
20.0 30.0 15.0 40.0 30.0 30.0
608.366
code:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; #define pi acos(-1.0) struct node { double x; double y; double r; } c[1001]; double area(int i,double r1,int j,double r2) { double d= sqrt((c[i].x-c[j].x)*(c[i].x-c[j].x)+(c[i].y- c[j].y)*(c[i].y-c[j].y));//圆心距 if (r1>r2) { double temp=r1; r1=r2; r2=temp; }//r1取小 if (r1+r2<=d) return 0;//相离 else if (r2-r1>=d) return pi*r1*r1;//内含 else { double a1=acos((r1*r1+d*d-r2*r2)/(2.0*r1*d)); double a2=acos((r2*r2+d*d-r1*r1)/(2.0*r2*d)); return (a1*r1*r1+a2*r2*r2-r1*d*sin(a1)); }//相交 } int main() { int r1,r2; // int x1,y1,r1,x2,y2,r2; while(cin>>c[1].x>>c[1].y>>c[1].r>>c[2].x>>c[2].y>>c[2].r) printf("%0.3f\n",area(1,c[1].r,2,c[2].r)); return 0; }
有一天,小明心血来潮到化学实验室做实验,实验中要用到火柴,但是桌上没有,于是小明到别处翻箱倒柜找到了一袋子火柴,但是里面的火柴有的长度相等,有的长度不等。当小明做完实验的时候看着这些火柴突然想用它们拼正方形玩。
现在请你判断,小明随手拿出几根火柴,这些火柴能否按照头尾相接的方式拼成一个正方形,火柴不能折断来使用,并且每根火柴都必须使用上。
输入的第一行为一个整数n(1<=n<=100),表示测试数据的组数。
接下来n行,每行先输入一个整数m(4<=m<=20),表示小明拿出的火柴个数,然后输入m个整数,每个数表示一根火柴的长度,火柴长度范围为[1,10000]。
对于每组输入,如果能够拼成正方形,输出“yes”,否则输出“no”。
3
4 1 1 1 1
5 10 20 30 40 50
8 1 7 2 6 4 4 3 5
yes
no
yes
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; int vis[25]; int num[25]; int pingjun; int flag; int n; int cmp(int a,int b) { return b<a; } int dfs(int s,int cur,int countn,int pingjun) { if(cur==pingjun) { countn++; cur=0; s=1; if(countn==4) { flag=1; return 1; } } for(int i=s;i<=n;i++) { if(!vis[i]&&cur+num[i]<=pingjun) { vis[i]=1; if(dfs(i+1,cur+num[i],countn,pingjun)) return 1; vis[i]=0; } } return 0; } /* void dfs(int s,int cur,int countn,int pingjun)//这个超时,根本没改~ void 改成int 就过了?????~ { if(cur==pingjun) { countn++; cur=0; s=1; if(countn==4) { flag=1; return ; } } for(int i=s;i<=n;i++) { if(!vis[i]&&cur+num[i]<=pingjun) { vis[i]=1; dfs(i+1,cur+num[i],countn,pingjun); vis[i]=0; } } } */ int main() { int cas; scanf("%d",&cas); while(cas--) { memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num)); scanf("%d",&n); int sum=0; for(int i=1;i<=n;i++) { scanf("%d",&num[i]); sum+=num[i]; } sort(num+1,num+n+1,cmp); if(sum%4!=0) { printf("no\n"); continue; } pingjun=sum/4; flag=0; dfs(1,0,0,pingjun); if(flag) printf("yes\n"); else printf("no\n"); } return 0; }