0051 Differential II
#include <stdio.h>
#include <algorithm>
int main(){
int max,min,n,ten;
char s[9];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",s);
std::sort(s,s+8);
ten=1;
max=min=0;
for(int i=0;i<8;i++){
min+=ten*(s[7-i]-'0');
max+=ten*(s[i]-'0');
ten*=10;
}
printf("%d\n",max-min);
}
}
0052 Factorial II
#include <stdio.h>
//http://d.hatena.ne.jp/nanikaka/20110727/1311783975#cを参考に原理を理解してリンク先をマルコピ
int main(){
int n,sum;
scanf("%d",&n);
while(n!=0){
sum=0;
while(n>4){
sum+=n/5;
n/=5;
}
printf("%d\n",sum);
scanf("%d",&n);
}
}
0053 Sum of Prime Numbers
#include <stdio.h>
int sums[10100];
void setSo(){
int so[105000]={0},p=2;
sums[1]=2;
for(int i=3;i<105000;i+=2){
if(so[i]!=0) continue;
sums[p]=sums[p-1]+i;
p++;
for(int j=i*3;j<105000;j+=i*2){
so[j]=1;
}
}
}
int main(){
setSo();
int n;
scanf("%d",&n);
while(n!=0){
printf("%d\n",sums[n]);
scanf("%d",&n);
}
}
0054 Sum of Nth decimal places
解法
コードのa*=10;a/b%10がポイントです。
これによりa/bの小数点1ケタ目が手に入ります。
後は小学校の筆算と同じ原理です。
#include <stdio.h>
int main(){
int a,b,n,sum;
while(scanf("%d %d %d",&a,&b,&n)!=EOF){
sum=0;
a*=10;
while(n-->0){
sum+=(a/b)%10;
a%=b;
a*=10;
}
printf("%d\n",sum);
}
}
0055 Sequence
#include <stdio.h>
int main(){
double a,sum;
while(scanf("%lf",&a)!=EOF){
sum=0;
for(int i=0;i<10;i++){
sum+=a;
a=i%2==1?a/3:a*2;
}
printf("%.8lf\n",sum);
}
}
0056 Goldbach's Conjecture
解法
n=i+(n-i)とし、i,n-i両方が素数ならカウントしていくだけです。
小手先の高速化のために偶数の場合を無視するコードを導入しています。
#include<stdio.h>
int so[50002]={0};
void setSo(){
for(int i=3;i<50001;i+=2){
if(so[i]!=0) continue;
for(int j=i*3;j<50001;j+=i*2){
so[j]=1;
}
}
}
int main(){
setSo();
int n,sum;
scanf("%d",&n);
while(n!=0){
sum=0;
if((n-3)%2==1){
for(int i=3;i<n/2+1;i+=2){
if((n-i)<3) break;
if((so[n-i]|so[i])<1) sum++;
}
}
if((so[n-2]==0 && (n-2)%2==1) || n==4) sum++;
printf("%d\n",sum);
scanf("%d",&n);
}
}
0057 The Number of Area
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)>0){
printf("%d\n",n*(n+1)/2+1);
}
}
0058 Orthogonal
#include<stdio.h>
int main(){
double xs[4],ys[4];
while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2],&xs[3],&ys[3])!=EOF){
printf("%s\n",(xs[1]-xs[0])*(xs[3]-xs[2])+(ys[1]-ys[0])*(ys[3]-ys[2])==0.0?"YES":"NO");
}
}
0059 Intersection of Rectangles
#include<stdio.h>
int main(){
double xs[4],ys[4];
while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&xs[0],&ys[0],&xs[1],&ys[1],&xs[2],&ys[2],&xs[3],&ys[3])!=EOF){
printf("%s\n",(xs[0]<=xs[3] && ys[0]<=ys[3] && xs[2]<=xs[1]&& ys[2]<=ys[1])?"YES":"NO");
}
}
0060 Card Game
#include<stdio.h>
int main(){
int c1,c2,c3,m[11],sum;
while(scanf("%d %d %d",&c1,&c2,&c3)!=EOF){
for(int i=1;i<11;i++) m[i]=0;
m[c1]=m[c2]=m[c3]=1;
sum=0;
for(int i=1;i<11;i++){
if(m[i]!=1 && c1+c2+i<=20){
sum++;
}
}
printf("%s\n",sum>3?"YES":"NO");
}
}
最終更新:2011年10月30日 17:30