[演算法]演算法競賽入門經典,筆記,見證成長。
1.位數:
輸入一個不超過10的9次的正整數,輸出它的位數。例如12735的位數是5。不使用任何數學函式。
C語言版(輸入輸出函式):
#include <stdio.h>
int main(void)
{
int a,c,i=0,num;
char arr[9];
while(scanf("%d",&a)==1)
{
for(i = 0;a > 0;i++)
{
arr[i] = a% 10 + '0';
a =a/10;
}
printf("%d\n",i);
}
}
fopen版
#include <stdio.h>
int main(void)
{
FILE *fin,*fout;
fin=fopen("digit.in","rb");
fout=fopen("digit.out","wb");
int a,c,i=0,num;
char arr[9];
while(fscanf(fin,"%d",&a)==1)
{
for(i = 0;a > 0;i++)
{
arr[i] = a% 10 + '0';
a =a/10;
}
fprintf(fout,"%d\n",i);
}
fclose(fin);
fclose(fout);
}
freopen版
#include <stdio.h>
int main(void)
{
int a,c,i=0,num;
char arr[9];
freopen("digit.in","r",stdin);
freopen("digit.out","w",stdout);
while(fscanf(stdin,"%d",&a)==1)
{
for(i = 0;a > 0;i++)
{
arr[i] = a% 10 + '0';
a =a/10;
}
fprintf(stdout,"%d\n",i);
}
fclose(stdin);
fclose(stdout);
}
2.水仙花數
輸出100~999的所有水仙花數。若3位數ABC滿足ABC=A的3次+B的3次+C的3次,即為水仙花數。
c語言版(輸入輸出函式):
#include <stdio.h>
int main(void)
{
int a,x,y,z;
for(a=100;a<999;a++)
{
x=a/100;
y=a/10%10;
z=a%10;
//printf("%d%d%d",x,y,z);
if(a==x*x*x+y*y*y+z*z*z)
printf("%4d",a);
}
}
fopen版:
#include <stdio.h>
int main(void)
{
int a,x,y,z;
FILE *out;
out=fopen("daffodil.out","w");
for(a=100;a<999;a++)
{
x=a/100;
y=a/10%10;
z=a%10;
//printf("%d%d%d",x,y,z);
if(a==x*x*x+y*y*y+z*z*z)
fprintf(out,"%4d",a);
}
return 0;
}
freopen版:
#include <stdio.h>
int main(void)
{
int a,x,y,z;
freopen("daffodil.out","w",stdout);
for(a=100;a<999;a++)
{
x=a/100;
y=a/10%10;
z=a%10;
//printf("%d%d%d",x,y,z);
if(a==x*x*x+y*y*y+z*z*z)
printf("%4d",a);
}
return 0;
}