0001 List of Top 3 Hills
#include<stdio.h>
#include <algorithm>
int main(){
int m[10],i;
for(i=0;i<10;i++){scanf("%d",&m[i]);}
std::sort(m,m+10);
for(int i=9;i>6;i--)printf("%d\n",m[i]);
}
0002 Digit Number
#include<stdio.h>
int main(){
int a,b,c,d=0;
while(scanf("%d %d",&a,&b)!=EOF){
c=a+b;
d=0;
while(c/10!=0){
c/=10;
d++;
}
printf("%d\n",d+1);
}
}
0003 Is it a Right Triangle?
#include<stdio.h>
int main(){
int a,b,c,d;
scanf("%d",&d);
for(int i=0;i<d;i++){
scanf("%d %d %d",&a,&b,&c);
a*=a;
b*=b;
c*=c;
if(a==b+c || b==c+a || c==b+a){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
0004 Simultaneous Equation
2*2の逆行列を理解しているかが問われる問題です。
高校数学の教科書通りに実装します。
#include<stdio.h>
int main(){
double a,b,c,d,e,f,x,y,k;
while(scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f)!=EOF){
k=a*e-b*d;
x=(e*c-b*f)/k+0.0;
y=(-d*c+a*f)/k+0.0;
printf("%.3lf %.3lf\n",x,y);
}
}
0005 GCD and LCM
#include<stdio.h>
int gcd(int a, int b)
{
int c;
while (b > 0)
{
c = a % b;
a = b;
b = c;
}
return a;
}
int main(){
int a,b,q;
while(scanf("%d %d",&a,&b)!=EOF){
q=gcd(a,b);
printf("%d %d\n",q,a*(b/q));
}
}
0006 Reverse Sequence
#include<stdio.h>
#include<string.h>
int main(){
char t[21];
scanf("%s",t);
for(int i=strlen(t)-1;i>=0;i--){
printf("%c",t[i]);
}
printf("\n");
}
0007 Debt Hell
#include<stdio.h>
int main(){
int d=100000,n;
scanf("%d",&n);
for(int i=0;i<n;i++){
d*=1.05;
d+=d%1000==0?0:1000-d%1000;
}
printf("%d\n",d);
}
0008 Sum of 4 Integers
#include<stdio.h>
#include<string.h>
int main(){
unsigned int m[5][52],p,q;
memset(m,0,1040);
m[0][0]=1;
for(int k=0;k<51;k++){
for(int i=0;i<40;i++){
p=i/10;
q=i%10;
if(k+p>50) continue;
m[p+1][k+q]+=m[p][k];
}
}
while(scanf("%d",&p)!=EOF){
printf("%d\n",m[4][p]);
}
}
0009 Prime Number
#include<stdio.h>
#include<string.h>
#include<map>
std::map<int,int> s;
int p;
void setSo(){
const m=1000003;
bool t[m];
p=1;
memset(t,m,true);
s[2]=p;
for(int i=3;i<m;i+=2){
if(t[m]==false) continue;
p++;
s[i]=p;
for(int j=i*3;j<m;j+=i*2){
t[j]=false;
}
}
}
int main(){
setSo();
int d;
std::map<int,int>::iterator it;
while(scanf("%d",&d)!=EOF){
it=s.lower_bound(d);
it=it!=s.begin()?it--:it;
printf("%d\n",(*it).second);
}
}
0010 Circumscribed Circle of a Triangle
#include<stdio.h>
#include<math.h>
double getDoubleSin(double x1,double y1,double x2,double y2){
double len1,len2,s,c;
len1=sqrt(x1*x1+y1*y1);
len2=sqrt(x2*x2+y2*y2);
s=fabs(x1*y2-y1*x2)/(len1*len2);
c=(x1*x2+y1*y2)/(len1*len2);
//printf("(%lf %lf)",s,c);
return 2*s*c;
}
double getR(double a,double b,double c){
double ans=a*b*c;
ans/=sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c));
return ans;
}
int main(){
double xs[3],ys[3];
double g1,g2,g3;
double vx1,vy1,vx2,vy2;
double g[3];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2]);
double ansX=0,ansY=0,gSum=0;
double lens[3];
for(int i=0;i<3;i++){
vx1=xs[(i+1)%3]-xs[i];
vy1=ys[(i+1)%3]-ys[i];
vx2=xs[(i+2)%3]-xs[i];
vy2=ys[(i+2)%3]-ys[i];
lens[i]=sqrt(vx1*vx1+vy1*vy1);
g[i]=getDoubleSin(vx1,vy1,vx2,vy2);
//printf("(2s=%lf)\n",g[i]);
ansX+=g[i]*xs[i];
ansY+=g[i]*ys[i];
gSum+=g[i];
}
double R=getR(lens[0],lens[1],lens[2]);
ansX/=gSum;
ansY/=gSum;
printf("%.3lf %.3lf %.3lf\n",ansX,ansY,R);
}
}
最終更新:2011年08月21日 17:22