首页推荐C语言

c语言功能代码(一)

2018-03-14  本文已影响0人  恰皮

c菜鸟刷题打怪升级,记一些题,以后忘了可以参考参考,若有大神给出厉害的解决方法,感激不尽。
题目来源:http://www.scut.edu.cn/oj/

int main () {
    int i=0,j;
    int arr[100];
    char flag;
    printf("input numStr:");
    do {
        scanf("%d",&arr[i]);
        flag = getchar();
        i++;
    }while( flag!='Q' && flag!='q');
    for(j = 0; j < i-1; j++) {
        printf("%d\t",arr[j]);
    }
    return 0;
}
# include <stdio.h>
#include <stdlib.h>

int main () {
    char flag; //作为判断是否输入结束的标志
    int tmp; //冒泡排序时交换数据暂时用的变量
    struct Node {
        int value;
        struct Node* next;
    };
    struct Node* head=NULL; //头结点
    struct Node* q = NULL;
    struct Node* p = NULL;
    head =  (struct Node*)malloc( sizeof(struct Node) );//生成头结点
    head->next = NULL;
    printf("input numStr:");
    //输入数据,生成链表
    while(1){
        p = (struct Node*)malloc( sizeof(struct Node) );
        scanf("%d",&p->value);
        flag =getchar();
        p->next= head->next;
        head->next = p;
        if(flag=='\n'){
            break;
        }
    }
    //冒泡排序
    for(p=head->next;p!=NULL;p=p->next){
        for(q=p->next;q!=NULL;q=q->next){
            if(p->value>q->value){
                tmp = p->value;
                p->value = q->value;
                q->value = tmp;
            }
        }
    }
    //输出链表
    p = head->next;
    while(p!=NULL){
        printf("%d\t",p->value);
        p=p->next;
    }
    return 0;
}
# include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () {
    double a,b,c,delta;
    printf("input a,b,c:");
    scanf("%lf",&a);
    while(a==0){
        printf("a cannot be 0:");
        scanf("%lf",&a);
    }
    scanf("%lf %lf",&b,&c);
    delta = b*b-4*a*c;
    if(delta<0){
        printf("无解");
    }
    else if(delta==0){
        printf("x1=x2=%.2lf",(-b)/(2*a));
    }
    else {
        printf("x1=%.2lf,x2=%.2lf",(-b+sqrt(delta))/(2*a),(-b-sqrt(delta))/(2*a));
    }
    printf("\n");
    return 0;
}
# include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () {
    int str[4];
    int i,j,k;
    for(i=0;i<4;i++){
        scanf("%d",&str[i]);
    }
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            for(k=0;k<4;k++){
                if(k!=i&&k!=j&&i!=j){
                    printf("%d %d %d\n",str[i],str[j],str[k]);
                }
            }
        }
    }
    return 0;
}
# include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () {
    int num,tmp,sum,i;
    for(num=100;num<1000;num++){
        tmp = num;
        sum = 0;
        for(i=0;i<3;i++){
            sum = sum+(tmp%10)*(tmp%10)*(tmp%10);
            tmp = tmp/10;
        }
        if(sum == num) {
            printf("%d\n",num);
        }
    }
    return 0;
}
int main () {
    int x = 1993;
    int a,b,c,d,e,f,g;
    while(1){
        a = x%8;//1
        b = (x/8)%8;//1
        c = (x/8)/8/8;//a
        d = (x/8)/8%8;//7
        e = x%17;//4
        f = (x/17)%17;//15
        g = (x/17)/17;//2a
        //printf("%d %d %d %d %d %d %d\n",a,b,c,d,e,f,g);
        if((a==1)&&(b==1)&&(d==7)&&(e==4)&&(f==15)&&(g==2*c))break;
        x++;
    }
    printf("%d\n",x);
    return 0;
}
int main () {
    int numA,numB=0;
    int i,sum=0;
    for(numA=1;numA<=3000;numA++){
        sum=0;
        numB=0;
        for(i=1;i<numA;i++){
            if(numA%i==0){
                numB = numB + i;
            }
        }
        if(numB<=3000){
            for(i=1;i<numB;i++){
                if(numB%i==0){
                    sum = sum+i;
                }
            }
            if(sum==numA&&numB>numA){
                printf("(%d,%d)",numA,numB);
            }
        }
    }
    printf("\n");
    return 0;
}
# include <stdio.h>

int main () {
    int i,factor,j;
    for(i=1;i<40;i++){
        factor = 1;
        for(j=1;j<=i;j++){
            if(i%j==0&&40%j==0){
                factor = j;
            }
        }
        if(factor == 1){
            printf("%d/40,",i);
        }
    }
    printf("\n");
    return 0;
}
# include <stdio.h>
# include <string.h>

int main () {
    int a,b,c,d,e,f;
    int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0;
    for(a=0;a<=1;a++){
        for(b=0;b<=1;b++){
            for(c=0;c<=1;c++){
                for(d=0;d<=1;d++){
                    for(e=0;e<=1;e++){
                        for(f=0;f<=1;f++){
                            flag1 = a||b;
                            flag2 = (a==1&&d==0)||(a==0&&d==1);
                            flag3 = (a==1&&e==1&&f==0)||(a==1&&e==0&&f==1)||(a==0&&e==1&&f==1);
                            flag4 = (b==1&&c==1)||(b==0&&c==0);
                            flag5 = (c==1&&d==0)||(c==0&&d==1);
                            flag6 = (d==0&&e==0)||(d==1&&e==1)||(d==1&&e==0);
                            if(flag1&&flag2&&flag3&&flag4&&flag5&&flag6){
                                    if(a==1)printf("A,");
                                    if(b==1)printf("B,");
                                    if(c==1)printf("C,");
                                    if(d==1)printf("D,");
                                    if(e==1)printf("E,");
                                    if(f==1)printf("F,");
                                    return 0;
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
# include <stdio.h>
# include <string.h>

int main () {
    int num[40]={1,1};
    int i,len;
    scanf("%d",&len);
    for(i=2;i<len;i++){
        num[i]=num[i-1]+num[i-2];
    }
    for(i=0;i<len-1;i++){
        printf("%d ",num[i]);
    }
    printf("%d\n",num[len-1]);
    return 0;
}
# include <stdio.h>
# include <string.h>

int main () {
    int num[100],i,len=0,max;
    scanf("%d",&num[0]);
    max=num[0];
    while(num[len]!=-1){
        len++;
        scanf("%d",&num[len]);
    }
    for(i=1;i<=len;i++){
        if(num[i]>max){
            max = num[i];
        }
    }
    printf("%d\n",max);
    return 0;
}
# include <stdio.h>
# include <string.h>

int multi (int num) {
    int i,result=1;
    for(i=1;i<=num;i++){
        result = result*i;
    }
    return result;
}

int main () {
    int num,i,result=0;
    scanf("%d",&num);
    for(i=1;i<=num;i++){
        result = result+multi(i);
    }
    printf("%d\n",result);
    return 0;
}
# include <stdio.h>
# include <math.h>

int main () {
    int a,n,i,j,num=0,sum=0;
    scanf("%d %d",&a,&n);
    for(i=1;i<=n;i++){
        num = 0;
        for(j=0;j<i;j++){
            num = num + a*pow(10.0,j);
        }
        sum = sum + num;
    }
    printf("%d\n",sum);
}
# include <stdio.h>
# include <math.h>

int main () {
    int num,front,back;
    for(num=1000;num<10000;num++){
        front = num/100;
        back = num%100;
        if(pow((front+back),2.0) == num){
            printf("%d  ",num);
        }
    }
}
# include <stdio.h>

int f(int x){
    if(x==1) return 10;
    if(x>1) return f(x-1)+2;
}
int main () {
    int x;
    scanf("%d",&x);
    printf("%d\n",f(x));
    return 0;
}
# include <stdio.h>

int main () {
    int n,i,j,sum=0;
    int arr[10][10];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&arr[i][j]);
        }
    }
    for(i=0;i<n;i++){
        sum = sum + arr[i][i];
    }
    for(i=0;i<n;i++){
        if(i!=(n-1-i)){
            sum = sum + arr[i][n-1-i];
        }
    }
    printf("%d\n",sum);
    return 0;
}

法二:利用矩阵对角线相加的规律:若N为奇数,则和为正对角线和乘以2再减去矩阵的最中间数arr[i][i](因为中间值被算了两次,所以要减掉);若N为偶数,则和为正对角线和乘以2.

# include <stdio.h>
# include <math.h>

int main () {
    int n,i,j,sum=0;
    int arr[10][10];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&arr[i][j]);
        }
    }
    for(i=0;i<n;i++){
        sum = sum + arr[i][i];
    }
    if(n%2==0){
        sum = sum*2;
    }
    else {
        sum = sum*2-arr[(n-1)/2][(n-1)/2];
    }
    printf("%d\n",sum);
    return 0;
}
# include <stdio.h>
# include <math.h>

int main () {
    int n,i,num,flag;
    scanf("%d",&n);
    for(num=2;num<=n;num++){
        flag = 0;
        for(i=2;i<=sqrt((double)num);i++){
            if(num%i==0){
                flag = 1;
                break;
            }
        }
        if(flag == 0){
            printf("%d ",num);
        }
    }
    return 0;
}
# include <stdio.h>

int main () {
    int num = 95859;
    int shang,yu;
    int arr[20],i,j,flag;
    do{
        num++;
        shang = num;
        i=0;
        flag=0;
        /*分解当前值,得到每一位,存入数组*/
        do {
            yu = shang%10;
            shang = shang/10;
            arr[i] = yu;
            i++;
        }while(shang!=0);
        for(j=0;j<i;j++){
            if(arr[j]!=arr[i-1-j]){/*判断是否是对称数*/
                flag = 1;
                break;
            }
        }
    }while(flag==1);/*标记为1代表当前数不是对称数,还要继续增值进行判断*/
    printf("新的对称数为:%d,车速为%lf(里程)/s\n",num,(num-95859)/7200.0);  //里程表的数字应该是千米的意思吗???
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读