码迷,mamicode.com
首页 > 编程语言 > 详细

C语言基础(一)

时间:2016-09-13 13:42:17      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

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语言基础(一)

标签:

原文地址:http://www.cnblogs.com/yzwhykd/p/5868020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!