首页 > 代码库 > C语言基础(一)

C语言基础(一)

7744问题(输出所有形如aabb的4位完全平方数)

方法1:

#include<stdio.h>#include<math.h>int main (){    for(int a=1;a<=9;a++){        for(int b=0;b<=9;b++){            int n = a*1100+b*11;            int m = floor(sqrt(n)+0.5);            if(m*m == n) printf("%d\n",n);        }    }    return 0;    }

方法2:

#include<stdio.h>#include<math.h>int main (){    for(int x=1;;x++){        int n = x*x;        if(n < 1000)continue;        if(n > 9999)break;        if(n/1000 == n/100%10 && n/10%100%10 == n%10) printf("%d\n",n);    }     return 0;}

开灯问题:

n盏灯,k个人

#include<stdio.h>#include<string.h>int a[1000];int main (){    int n,k,first = 1;    memset(a,0,sizeof(a));    scanf("%d%d",&n,&k);    for(int i=1;i<=k;i++){        for(int j=1;j<=n;j++){            if(j%i==0)a[j]=!a[j];        }    }    for(int i=1;i<=n;i++){        if(a[i])printf("%d ",i);    }    return 0;}

生成元

给定n,求最小生成元(如果x加上x的各位数字之和为y,则称x是y的生成元)

#include<stdio.h>#include<string.h>int a[100005];int main (){    int T,n;    memset(a,0,sizeof(a));    for(int m=1;m<3000;m++){        int x = m,y = m;        while(x>0){            y+=x%10;            x/=10;        }        if(a[y] == 0 || a[y] > m)a[y]=m;    }    scanf("%d",&T);    while(T--){        scanf("%d",&n);        printf("%d\n",a[n]);    }    return 0;}

生成1~n的排列

#include<stdio.h>#include<string.h>int a[100];void f(int n,int* a,int cur){    if(n==cur){        for(int i=0;i<n;i++){            printf("%d",a[i]);        }        printf("\n");    }    else     for(int i=1;i<=n;i++){        int ok = 1;        for(int j=0;j<cur;j++){            if(a[j]==i) ok = 0;        }        if(ok){            a[cur]=i;            f(n,a,cur+1);        }    }}int main (){    f(3,a,0);    return 0;}

n皇后问题解的个数:

#include<stdio.h>#include<string.h>int a[100];long total=0;int n;void search(int cur){    if(cur==n)total++;    else     for(int i=0;i<n;i++){        int ok=1;        a[cur]=i;        for(int j=0;j<cur;j++){            if(a[cur]==a[j] || cur-a[cur]==j-a[j] || cur+a[cur]==j+a[j]){                ok=0;                break;            }        }        if(ok)search(cur+1);    }}int main (){    scanf("%d",&n);    search(0);    printf("%ld\n",total);    return 0;}

tip:

printf("%5d",x); //%5d表示按照5位数打印,不足5位在前面补空格
scanf("%s",s); 遇到空白字符会停下来
printf("%.1f",x); 保留小数点后一位

 

C语言基础(一)