1.将10进制转为二进制,递归,将2换成其他数字可以转换为其它进制。
#include<stdio.h>
int fact(int n){
if(n<2)
return n;
else
{
return fact(n/2)*10+n%2;
}
}
int main(){
int n;
scanf("%d",&n);
printf("%d",fact(n));
return 0;
}
2.啤酒和饮料,第一遍,不知道为什么不能这样写,整数和浮点数相乘强制转换为浮点数,两个整数相加精确度会出问题。
if(i*2.3+j*1.9==82.3)
后来看到直接把所有数乘以10就好了。
#include<stdio.h>
int main(){
int n;
for(int i=1;i*23<823;i++){
for(int j=i+1; j*19<823;j++){
if(i*23+j*19==823)
printf("%d",i);
}
}
return 0;
}
或者减去0.000001,将其转换为高精度,误差缩小。
if(i*2.3+j*1.9>=82.3-0.000001&&i*2.3+j*1.9<=82.3+0.000001)
3.圆的面积,定义PI,输出.7f
#include<stdio.h>
#define PI 3.141592653589
int main(){
int n;
scanf("%d",&n);
printf("%.7f",n*n*PI);
return 0;
}
4.切面条
#include<stdio.h>
int main(){
int n=2;
for(int i=1; i<=10; i++){
n=n*2-1;
}
printf("%d",n);
return 0;
}
5.01字符串
#include<stdio.h>
int main(){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
for(int m=0;m<2;m++){
for(int n=0;n<2;n++){
for(int x=0;x<2;x++)
printf("%d%d%d%d%d\n",i,j,m,n,x);
}
}
}
}
return 0;
}
#include<stdio.h>
int main(){
for(int i=0;i<32;i++){
printf("%d%d%d%d%d\n",i/16%2,i/8%2,i/4%2,i/2%2,i%2);
}
return 0;
}
6.字母图形,主要是从A将一行分开。
#include<stdio.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
int x,y;
for(int i=0; i<m; i++){
for(x=0; x<i; x++){
printf("%c",65+i-x);
}
for(y=x;y<n;y++){
printf("%c",65-i+y);
if(y==n-1)
printf("\n");
}
}
return 0;
}
7.求n个数的最大值,最小值,和
#include<stdio.h>
int main(){
int n,x,sum=0,min=1000,max=-1000;
scanf("%d",&n);
while(n--){
scanf("%d",&x);
sum=sum+x;
if(x>max)
max=x;
if(x<min)
min=x;
}
printf("max=%d\nmin%d\nsum=%d\n",max,min,sum);
return 0;
}
8.杨辉三角形
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int a[n][n];
a[0][0]=1;
for(int i=0; i<n; i++){
a[i][0]=a[i][i]=1;
for(int j=1; j<i; j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(int i=0; i<n; i++){
for(int j=0; j<=i; j++)
printf("%d",a[i][j]);
printf("\n");
}
return 0;
}
9.求两个数的最大公约数,最小公倍数,两个数相乘再除以最大公约数。
第一种做法:穷举法
#include<stdio.h>
int main(){
int a,b,min,max;
scanf("%d %d",&a,&b);
min=(a<b)?a:b;
max=(a>b)?a:b;
for(int i=1; i<=min; i++){
if(a%i==0&&b%i==0)
{
printf("%d\n",i);
break;
}
}
for(int i=max; ;i++){
if(i%a==0&&i%b==0){
printf("%d\n",i);
break;
}
}
return 0;
}
第二种做法:辗转相除法
#include<stdio.h>
int main(){
int a,b,m,n,c;
scanf("%d %d",&a,&b);
m=a,n=b;
while(n!=0){
c=m%n;
m=n;
n=c;
}
printf("%d %d",m,a*b/m);
return 0;
}
第三种做法:相减法
#include<stdio.h>
int main(){
int a,b,m,n,c;
scanf("%d %d",&a,&b);
m=a,n=b;
while(m!=n){
if(m>n)
m=m-n;
else
n=n-m;
}
printf("%d %d",m,a*b/m);
return 0;
}