100个经典C语言程序(益智类)

2023-10-31

100个经典C语言程序(益智类)

【1.绘制余弦曲线】

在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线

[问题分析与算法设计] 利用cos(x)的左右对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就 应为62-m。程序中利用反余弦函数acos计算坐标(x,y)的对应关系。  

#include<stdio.h>

#include<math.h>

void main(){

         double y;

         int x,m;

         for(y=1;y>=-1;y-=0.1){

                   m=acos(y)*10;

                   for(x=1;x<m;x++)

                            printf(" ");

                   printf("*");

                   for(;x<62-m;x++)

                            printf(" ");

                   printf("*");

                   printf("\n");

         }

}

 

【2.绘制余弦曲线和直线】

在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(y-1)+31的迭加图形。其中cos(x)图形用“*”表示,f(x)用“+”表示,在两个图形相交的点上则用f(x)图形的符号。

[问题分析与算法设计] 图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。为此,可以先判断图形的交点,再分别控制打印两个不同的图形。

#include<stdio.h>

#include<math.h>

void main(){

         double y;

         int x,m,n,yy;

         for(yy=0;yy<=20;yy++){

                   y=0.1*yy;

                   m=acos(1-y)*10;

                   n=45*(y-1)+31;

                   for(x=0;x<62;x++){

                            if(x==m&&x==n)

                                     printf("+");

                            else if(x==n)

                                     printf("+");

                            else if(x==m||x==62-m)

                                     printf("*");

                            else

                                     printf(" ");

                   }

                   printf("\n");

         }

}

 

【3.绘制圆】

    在屏幕上用“*”画一个空心的圆

  [算法分析与设计] 打印圆可利用图形的左右对称性。根据圆的方程:R*R=X*X+Y*Y 可以算出圆上每一点行和列的对应关系。

#include<stdio.h>

#include<math.h>

void main(){

    double y;

    int x,m;

    for(y=10;y>=-10;y--){

        m=2.5*sqrt(100-y*y);  

        for(x=1;x<30-m;x++)

                            printf(" ");   

        printf("*");                       

        for(;x<30+m;x++)

                            printf(" ");     

        printf("*\n");                             

    }

}

 

【4.歌星大奖赛】

    在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。

[算法分析与设计]选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。

#include<stdio.h>

void main(){

    int integer,i,max,min,sum;

    max=-32768;                

    min=32767;                 

    sum=0;                     

    for(i=1;i<=10;i++){

        printf("Input number %d = ",i);

        scanf("%d",&integer);        

        sum+=integer;                

        if(integer>max)

                            max=integer;  

        if(integer<min)

                            min=integer;  

    }

    printf("\nCanceled max score:%d\nCanceled min score:%d\n",max,min);

    printf("\nAverage score: %d\n",(sum-max-min)/8);   

}

 

【5.求最大数】

         问555555的约数中最大的三位数是多少?

#include<stdio.h>

void main(){

         long i;

         int j;

         printf("Please input the number: ");

         scanf("%ld",&i);

         for(j=999;j>=100;j--){

                   if(i%j==0){

                            printf("The max factor with 3 digits in %ld is: %d\n",i,j);

                            break;

                   }

         }

}

 

【6.高次方数的尾数】

         求13的13次方的最后三位数

  [算法设计与分析]研究乘法的规律发现:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。

#include<stdio.h>

void main(){

    int i,x,y,last=1;  

    printf("Input X and Y(X**Y):");

    scanf("%d**%d",&x,&y);

    for(i=1;i<=y;i++)              

        last=last*x%1000;   

    printf("The last 3 digits of %d**%d is:%d\n",x,y,last%1000);

}

 

【7. 分数四则运算】

    对输入的两个分数进行+、-、*、/四则运算,输出分数结果。

#include<stdio.h>

void main(){

    long int a,b,c,d,i,x,y,z;

    char op;

    printf("两分数b/a,d/c作+,-,*,/四则运算,结果为分数。\n");

    printf("请输入分数运算式。\n");

    scanf("%ld/%ld%c%ld/%ld",&b,&a,&op,&d,&c);

    if(a==0||c==0) {

                   printf("分母为0输入错误!");

         }

    if(op=='+') {

                   y=b*c+d*a;

                   x=a*c;

         }      

    if(op=='-') {

                   y=b*c-d*a;

                   x=a*c;

         }

    if(op=='*') {

                   y=b*d;

                   x=a*c;

         }

    if(op=='/') {

                   y=b/c;

                   x=a/d;

         }

    z=x;

    if(x>y)

                   z=y;

    i=z;

    while(i>1) {

        if(x%i==0&&y%i==0){

                            x=x/i;

                            y=y/i;

                            continue;

                   }

        i--;

    }

    printf("%ld/%ld%c%ld/%ld=%ld/%ld.\n",b,a,op,d,c,y,x);

 

}

 

【8.借书方案知多少】

    小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

#include<stdio.h>

void main(){

    int a,b,c,count=0;

    printf("There are diffrent methods for XM to distribute books to 3 readers:\n");

    for(a=1;a<=5;a++)           

        for(b=1;b<=5;b++)       

            for(c=1;c<=5;c++)  

                if(a!=b&&c!=a&&c!=b)      

                    printf(count%8?"%2d:%d,%d,%d ":"%2d:%d,%d,%d  \n",++count,a,b,c);

}

 

【9.杨辉三角形】

    在屏幕上显示杨辉三角形

                            1

 

                         1      1

 

                      1     2      1

 

                   1     3     3      1

 

               1      4     6      4     1

 

            1     5     10     10     5     1

#include<stdio.h>

int c(int x,int y){

    int z;

    if((y==1)||(y==x+1))

                   return 1;

    z=c(x-1,y-1)+c(x-1,y);        

    return z;

}

void main(){

    int i,j,n=13;

    printf("N=");

    while(n>12)

        scanf("%d",&n);   

    for(i=0;i<=n;i++){

        for(j=0;j<24-2*i;j++)

                            printf(" ");

        for(j=1;j<i+2;j++)

                            printf("%4d",c(i,j));  

        printf("\n");

    }

}

 

【10.数制转换】

    将任一整数转换为二进制形式

#include<stdio.h>

void printb(int x,int n){

    if(n>0){

        putchar(\'0\'+((unsigned)(x&(1<<(n-1)))>>(n-1)));

        printb(x,n-1);    

    }

}

 

void main(){

    int x;printf("Input number:");

    scanf("%d",&x);

    printf("number of decimal form:%d\n",x);

    printf("      it\'s binary form:");

    printb(x,sizeof(int)*8);

    putchar(\'\n\');

}

 

【11.打鱼还是晒网】

   中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

#include<stdio.h>

struct date{

         int year;

         int month;

         int day;

};

 

int days(struct date day){        

         static int day_tab[2][13]=

{ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}};

         int i,lp;

         lp=(day.year%4==0)&&(day.year%100!=0)||(day.year%400==0);  //判定year为闰年还是平年,lp=0为平年,非0为闰年

    for(i=1;i<day.month;i++){                   //计算本年中自1月1日起的天数

                   if(lp=0)

                            day.day+=day_tab[0][13];

                   else

                            day.day+=day_tab[1][13];

         }

         return day.day;

}

 

void main(){

         struct date today,term;

         int yearday,year,day;

         printf("Enter year/month/day:");

         scanf("%d%d%d",&today.year,&today.month,&today.day);  /*输入日期*/

         term.month=12;               /*设置变量的初始值:月*/

         term.day=31;                 /*设置变量的初始值:日*/

         for(yearday=0,year=1990;year<today.year;year++){

                   term.year=year;

                   yearday+=days(term);     /*计算从1990年至指定年的前一年共有多少天*/

         }

         yearday+=days(today);       /*加上指定年中到指定日期的天数*/

         day=yearday%5;               /*求余数*/

         if(day>0&&day<4)

                   printf("he was fishing at that day.\n");   /*打印结果*/

         else

                   printf("He was sleeping at that day.\n");

}

 

【12.抓交通肇事犯】

   一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。

#include<stdio.h>

void main(){

         int i,j,k;

         int num;

         for(i=0;i<=9;i++){               //车号前两位的取值

                   for(j=0;j<=9;j++){      //车号后两位的取值

                            if(i!=j){                //前两位和后两位不同

                                     num=i*1000+i*100+j*10+j;

                                     for(k=1;k*k<num;k++);

                                     if(k*k==num)

                                               printf("Lorry--No. is %d \n",num);

                            }

                   }

         }

}

 

【13.该存多少钱】

    假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后的五年中的年底取出1000元,到第五年时刚好取完,请算出他存钱时应存入多少。

#include<stdio.h>

void main(){

    int i;

    float total=0;

    for(i=0;i<5;i++)                   

        total=(total+1000)/(1+0.0063*12);

    printf("He must save %.2f at first.\n",total);

}

 

【14.怎样存钱利最大】

假设银行整存整取存款不同期限的月息利率分别为:

            0.63%     期限=1年

            0.66%     期限=2年

            0.69%     期限=3年

            0.75%     期限=5年

            0.84%     期限=8年

利息=本金*月息利率*12*存款年限。

现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。

#include<stdio.h>

#include<math.h>

void main(){

         int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;

         float max=0,term;

    for(i8=0;i8<3;i8++)       /*穷举所有可能的存款方式*/

                   for(i5=0;i5<=(20-8*i8)/5;i5++)

                            for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)

                                     for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++){

                                               i1=20-8*i8-5*i5-3*i3-2*i2;

                                               term=2000.0*pow((double)(1+0.0063*12),

                                                                                    (double)i1)*pow((double)(1+2*0.0063*12),

                                                                                    (double)i2)*pow((double)(1+3*0.0069*12),

                                                                                    (double)i3)*pow((double)(1+5*0.0075*12),

                                                                                    (double)i5)*pow((double)(1+8*0.0084*12),

                                                                                    (double)i8);

                                                /*计算到期时的本利合计*/

                                               if(term>max){

                                                        max=term;

                                                        n1=i1;

                                                        n2=i2;

                                                        n3=i3;

                                                        n5=i5;

                                                        n8=i8;

                                               }

                            }

         printf("For max profit,he should save his money in a bank:\n");

         printf("   made fixed deposit for 8 year: %d times\n",n8);

         printf("   made fixed deposit for 5 year: %d times\n",n5);

         printf("   made fixed deposit for 3 year: %d times\n",n3);

         printf("   made fixed deposit for 2 year: %d times\n",n2);

         printf("   made fixed deposit for 1 year: %d times\n",n1);

         printf("        Toal: %.2f\n",max);

}

 

【15.捕鱼和分鱼】

  A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿 走鱼。问他们合伙至少捕了多少条鱼?

#include<stdio.h>

void main(){

    int n,i,x,flag=1;        

    for(n=6;flag;n++){

        for(x=n,i=1&&flag;i<=5;i++)

            if((x-1)%5==0)  x=4*(x-1)/5;

            else   flag=0;            

        if(flag)  break;            

        else  flag=1;                

    }

    printf("Total number of fish catched=%d\n",n);

}

 

【16.出售金鱼】

    买卖提将养的一缸金鱼分五次出售,系统上一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问原来的鱼缸中共有几条金鱼?

#include<stdio.h>

void main(){

    int i,j,n=0,x;                   

    for(i=23;n==0;i+=2) {

        for(j=1,x=i;j<=4&&x>=11;j++)

            if((x+1)%(j+1)==0)      

                x-=(x+1)/(j+1);

            else {

                                     x=0;

break;

                            }       

        if(j==5&&x==11) {

            printf("There are %d fishes at first.\n",i);        

            n=1;                                        

        }

    }

}

 

【17.平分七筐鱼】

  甲、乙、丙三位鱼夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有七筐装满了鱼,还有七筐装了半筐鱼,另外七筐则是空的,由于他们没有秤,只好通过目测认为七个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份?

#include<stdio.h>

int a[3][3],count;

void main(){

    int i,j,k,m,n,flag;

    printf("It exists possible distribtion plans:\n");

    for(i=0;i<=3;i++) {

        a[0][0]=i;

        for(j=i;j<=7-i&&j<=3;j++) {

            a[1][0]=j;

            if((a[2][0]=7-j-a[0][0])>3) continue;   

            if(a[2][0]<a[1][0]) break;  

            for(k=1;k<=5;k+=2) {

                a[0][1]=k;

                for(m=1;m<7-k;m+=2) {

                    a[1][1]=m;

                    a[2][1]=7-k-m;

                    for(flag=1,n=0;flag&&n<3;n++)

                        if(a[n][0]+a[n][1]<7&&a[n][0]*2+a[n][1]==7)

                            a[n][2]=7-a[n][0]-a[n][1];    

                        else  

flag=0;                      

                    if(flag){

                        printf("No.%d   Full basket Semi--basket Empty\n",++count);

                        for(n=0;n<3;n++)

                        printf("fisher %c:    %d    %d    %d\n", 'A'+n,a[n][0],a[n][1],a[n][2]);

                    }

                }

            }

        }       

}       

}

 

【18.有限5位数】

    个位数为6且能被3整除的五位数共有多少?

#include<stdio.h>

void main(){

    long int i;

    int count=0;             

    for(i=1000;i<9999;i++)

        if(!((i*10+6)%3))    

            count++;         

        printf("count=%d\n",count);

}

 

【19. 8 除不尽的数】

    一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。

         又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。

#include<stdio.h>

void main(){

    int i;

    for(i=0;;i++)               

        if(((i*8+7)*8+1)*8+1==(34*i+15)*17+4) {                                   

            printf("The required number is: %d\n",(34*i+15)*17+4);

            break;          

        }

}

 

【20.一个奇异的三位数】

    一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,求这个三位数。

[题目分析与算法设计]根据题意可知,七进制和九进制表示的这全自然数的每一位一定小于7,可设其七进制数形式为kji(i、j、k的取值分别为1~6),然后设其九进制表示形式为ijk。

#include<stdio.h>

void main(){

         int i,j,k;

         for(i=1;i<7;i++)

                   for(j=0;j<7;j++)

                            for(k=1;k<7;k++)

                                     if(i*9*9+j*9+k==i+j*7+k*7*7){

                                               printf("The special number with 3 digits is: ");

                                               printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k,j,i,i,j,k,i*9*9+j*9+k);

                                     }

}

 

【21.4位反序数】

   设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。

#include<stdio.h>

void main(){

    int i;

    for(i=1002;i<1111;i++)      

        if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9)

            printf("The number satisfied stats condition is: %d\n",i);

}

 

【22.求车速】

  一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?

 [算法分析与设计]设所求对称数为i,其初值为95589,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。

#include<stdio.h>

void main(){

    int t,a[5];          

    long int k,i;

    for(i=95860;;i++) {

        for(t=0,k=100000;k>=10;t++) {                             

            a[t]=(i%k)/(k/10);       

            k/=10;

        }

        if((a[0]==a[4])&&(a[1]==a[3])){

            printf("The new symmetrical number kelometers is: %d%d%d%d%d\n", a[0],a[1],a[2],a[3],a[4]);

            printf("The velocity of the car is: %.2f\n",(i-95859)/2.0);

            break;

        }

    }

}

 

【23.阿姆斯特朗数】

 如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。

如 407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。

#include<stdio.h>

void main(){

    int i,t,k,a[3];

    printf("There are follwing Armstrong number smaller than 1000:\n");

    for(i=2;i<1000;i++) {

        for(t=0,k=1000;k>=10;t++) {

            a[t]=(i%k)/(k/10);      

            k/=10;

        }

        if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i)

            printf("%5d",i);          

    }

    printf("\n");

}

 

【24.完全数】

    如果一个数恰好等于它的因子之和,则称该数为“完全数”。

#include<stdio.h>

void main(){

    int a,i,m;

    printf("There are following perfect numbers smaller than 1000: \n");

    for(a=1;a<1000;a++) {

        for(m=0,i=1;i<=a/2;i++) 

            if(!(a%i))

                                     m+=i;

        if(m==a)

            printf("%4d",a);

    }

    printf("\n");

}

 

【26.亲密数】

 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

#include<stdio.h>

void main(){

    int a,i,b,n;

    printf("There are following friendly--numbers pair smaller than 3000:\n");

    for(a=1;a<3000;a++) {      

        for(b=0,i=1;i<=a/2;i++)  

            if(!(a%i))

                                     b+=i;      

        for(n=0,i=1;i<=b/2;i++)

            if(!(b%i))

                                     n+=i;

        if(n==a&&a<b)

            printf("%4d..%4d    ",a,b);

    }

         printf("\n");

}

 

【27.自守数】

  自守数是指一个数的平方的尾数等于该数自身的自然数。请求出200000以内的自守数

#include<stdio.h>

void main(){

    long mul,number,k,ll,kk;

    printf("It exists following automorphic nmbers small than 200000:\n");

    for(number=0;number<200000;number++)

    {

        for(mul=number,k=1;(mul/=10)>0;k*=10);

        kk=k*10;    

        mul=0;      

        ll=10;      

        while(k>0) {

            mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;

            k/=10;             

            ll*=10;

        }

        if(number==mul)       

            printf("%ld   ",number);

    }

         printf("\n");

}

 

【28.回文数】

    打印所有不超过n (取n<256) 的其平方具有对称性质的数(也称回文数)。

#include<stdio.h>

void main(){

    int m[16],n,i,t,count=0;

    long unsigned a,k;

    printf("No.    number     it's square(palindrome)\n");

    for(n=1;n<256;n++) {

        k=0;t=1;a=n*n;          

        for(i=1;a!=0;i++){

            m[i] = a%10;

            a/=10;

        }

    for(;i>1;i--){

        k+=m[i-1]*t;

        t*=10;

    }

    if(k==n*n)

        printf("%2d%10d%10d\n",++count,n,n*n);

   }

}

 

【29.求具有abcd=(ab+cd)^2性质的四位数】

 3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,

即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。

#include<stdio.h>

void main(){

    int n,a,b;

    printf("There are following number with 4 digits satisfied condition\n");

    for(n=1000;n<10000;n++) {

        a=n/100;                      

        b=n%100;                      

        if((a+b)*(a+b)==n)    

            printf(" %d  ",n);

    }

         printf("\n");

}

 

【30.求素数】

    求素数表中1~1000之间的所有素数

#include<stdio.h>

void main(){

    int n1,nm,i,j,flag,count=0;

    do{

        printf("Input START and END=?");

        scanf("%d%d",&n1,&nm);         

    }while(!(n1>0&&n1<nm));             

    printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);

    if(n1==1||n1==2){

        printf("%4d",2);

        n1=3;

                   count++;

    }

    for(i=n1;i<=nm;i++) {

        if(!(i%2))

                            continue;

        for(flag=1,j=3;flag&&j<i/2;j+=2)

            if(!(i%j))

                                     flag=0;     

        if(flag)

                            printf(++count%15?"%4d":"%4d\n",i);

    }

         printf("\n");

}

 

【31.歌德巴赫猜想】

验证:2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立。

#include<stdio.h>

#include<math.h>

int fflag(int i) {

    int j;

    if(i<=1)  return 0;

    if(i==2)  return 1;

    if(!(i%2))  return 0;   

    for(j=3;j<=(int)(sqrt((double)i)+1);j+=2)

        if(!(i%j))  return 0;

    return 1;             

}

 

void main(){

    int i,n;

    for(i=4;i<=2000;i+=2){

        for(n=2;n<i;n++)       

            if(fflag(n))       

                if(fflag(i-n)) {

                    printf("%14d=%d+%d\n",i,n,i-n);      

                    break;

                }

            if(n==i) 

                                     printf("error %d\n",i);

    }

}

 

【32.要发就发】

“1898--要发就发”。请将不超过1993的所有素数从小到大排成第一行,第二行上的每个素数都等于它右肩上的素数之差。编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假好存在的话,又有几种这样的情况?

    第一行:2  3  5  7  11  13  17......1979  1987  1993

    第二行:1  2  2  4  2  4......         8     6

#include<stdio.h>

#include<math.h>

#define NUM 320

int number[NUM];   //存放不超过1993的全部素数

int fun(int i){

    int j;

    if(i<=1) return 0;   //判断是否为素数,为1是素数,为0不是素数

    if(i==2) return 1;

    if(!(i%2)) return 0;             

    for(j=3;j<=(int)(sqrt((double)i)+1);j+=2)

        if(!(i%j)) return 0;

    return 1;

}

void main(){

         int i,j,count=0;

         printf("There are following primes sequesces in first row: \n");    //列出第一行中差值为1989的所有素数组合

         for(j=0,i=3;i<=1993;i+=2){                                              //求出不超过1993的全部素数

                   if(fun(i))

                            number[j++]=i;

         }

         for(j--;number[j]>1898;j--){                                   //从最大的素数开始向1898搜索

                   for(i=0;number[j]-number[i]>1898;i++);           //循环查找满足条件的素数

                   if(number[j]-number[i]==1898)                                    //若两个素数的差为1898,则输出

                            printf("(%d).%3d,.....,%d\n",++count,number[i],number[j]);

         }

}

 

/*

    There are follwing primes sequences in first row:

    (1).89,......,1987

    (2).53,......,1951

    (3). 3,......,1901

 */

 

【35.素数幻方】

求四阶的素数幻方。即在一个4X4 的矩阵中,每一个格填 入一个数字,使每一行、每一列和两条对角线上的4 个数字所组成的四位数,均为可逆素数。

#include<stdio.h>

#include<math.h>

int number[210][5];   

int select[110];             

int array[4][5];      

int count;            

int selecount;        

int larray[2][200];   

int lcount[2];

int num(int number);

int ok(int number);

void process(int i);

void copy_num(int i);

int comp_num(int n);

int find1(int i);

int find2(void);

int find0(int num);

void p_array(void);

 

void main(){

    int i,k,flag,cc=0,i1,i4;

    printf("there are magic squares with invertable primes as follw:\n");

    for(i=1001;i<9999;i+=2){                             //求满足条件的可逆素数

        k=i/1000;

        if(k%2!=0&&k!=5&&num(i)){                     //若可逆素数的第一位不是偶数或5

            number[count][0]=i;                                     //存入数组

            process(count++);                               //分解素数的各位数字

            if(number[count-1][2]%2!=0&&      //若可逆素数满足放在矩阵第一行

               number[count-1][3]%2!=0&&   //和最后一行的条件,记录可逆素数的

               number[count-1][2]!=5&&                  //下标,计数器加1

               number[count-1][3]!=5)

                select[selecount++]=count-1;

        }

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

100个经典C语言程序(益智类) 的相关文章

  • pytorch语义分割-全卷积网络

    文章目录 1 语义分割和实例分割 2 语义分割的数据集处理 3 转置卷积 4 全卷积神经网络 FCN 1 语义分割和实例分割 2 语义分割的数据集处理 最重要的语义分割数据集之一是Pascal VOC2012 matplotlib inli
  • linux 可能从硬盘安装吗,从硬盘安装linux(radHat)

    1 gt 从网上下载redhat iso安装文件 并放在同一文件夹中 2 gt 用WinISO解开第一张盘的 iso文件 如解到cd1文件加中 不用全部解出 只要dosutils子文件夹就可以了 3 gt 进入MS DOS打开cd1文件夹的
  • 使用可视化库matplotlib绘图时,plt.show()过后只出现Figure size 640x480 with 1 Axes而没有生成图片

    使用可视化库matplotlib绘图时 plt show 过后只出现
  • Tomcat源码:Acceptor与Poller、PollerEvent

    参考资料 Tomcat源码解析系列 十一 ProtocolHandler Tomcat源码解析系列 十二 NioEndpoint 前文 Tomcat源码 启动类Bootstrap与Catalina的加载 Tomcat源码 容器的生命周期管理
  • 联想计算机连接不上蓝牙耳机,thinkpad如何连接蓝牙耳机_thinkpad连接蓝牙耳机的步骤...

    现在的电脑一般都配备有蓝牙功能 可以方便用户们使用一些蓝牙设备 例如最近就有小伙伴问小编thinkpad如何连接蓝牙耳机 那么针对这一问题 今天小编就来为大家整理分享关于thinkpad连接蓝牙耳机的步骤 一起往下看吧 具体步骤如下 1 先
  • VB封装DLL并调用

    首先明确DLL函数是什么 DLL 动态链接库 Dynamic Link Library 一个DLL文件里面可以包含多个函数 其实就是实现共享函数的一种方式 一个应用程序可能需要多个DLL联合起来才可以正常使用 一 新建ActiveX Dll
  • SpringCloud PK K8s 谁更胜一筹

    SpringCloud PK K8s 谁更胜一筹 Spring Cloud 和 Kubernetes 都声称自己是开发和运行微服务的最佳环境 但它们在本质上有很大的不同 解决的问题也不同 在本文中 我们将看看每个平台是如何交付基于微服务架构
  • 在Eclipse中进行Junit测试的个人总结

    1 怎样在Eclipse中集成使用Junit 想要在Eclipse这个IDE中集成使用Junit 首先需要下载Junit的包 具体下载方式可以自行查阅或翻看我之前有关Junit的博客的前半部分 下载完成后 进入Eclipse 打开工程 左键
  • 转帖:如何注册Filter

    参考文章 http apps hi baidu com share detail 16291532 AX文件的一个对外接口DllRegisterServer 由外部调用 比如注册AX的时候 regsvr32 xxx ax 通常情况下 我们的
  • Web3和 NFT将如何影响电子商务?

    每日更新 欢迎交流 感兴趣可以点个关注 你有没有发现 万维网上有很多改变 并且改变速度还很快 也许你已经读到过青少年将数字资产卖到数百万美元 匿名的加密货币创始人颠覆了传统的金钱概念 那么 这些新的 令人兴奋的 而且通常是奇怪的东西到底是关
  • F#的尾递归编译优化需要再好好优化优化

    先来看一道简单的算法题 给定一个整数序列 给定一个目标值 求出该序列中任意三个数之和中最接近目标值的那个数 这道题很容易想到的算法 对序列做从小到大排序 固定其中一个数的下标a 对剩下的两个数双指针b c 指向a右侧区域 窗口 的两端 根据
  • 连Hibernate技术都不清楚,你敢说你自己会ORM框架?

    前言 ORM框架不是一个新话题 它已经伴随我们很多年了 它提供了概念性的 易于理解的数据模型 将数据库中的表和内存中的对象建立了很好的映射关系 在Java中常用的ORM框架主要有两个 Hibernate和iBatis 本篇文章主要介绍Hib
  • SpringBoot 2.6.3 web(静态资源、欢迎页、favicon.ico)

    一 静态资源 静态资源访问路径 static or public or resources or META INF resources 访问方式 项目根路径 静态资源文件名 静态映射 请求进来先在controller中判断能 不能处理 不能
  • SOAP教程[转]

    SOAP教程 需要帮助 SOAP是一个简单的基于XML的协议 它让应用程序跨HTTP进行信息交换 在我们的SOAP教程 你将了解什么是SOAP 以及它是怎样利用XML来让程序间的信息进行交换的 内容目录 SOAP 介绍This chapte
  • qt富文本编辑基本知识(QTextBlockFormat、QTextListFormat)

    可以参考该文章 QTextBlockFormat QTextListFormat 程序员大本营 核心知识如下 如果想开发一个富文本编辑器 html markdown等常见格式 Qt已经为用户完成了几乎所有与编辑有关的具体工作 我们所要做的就
  • yarn中的container概念

    http dongxicheng org mapreduce nextgen understand yarn container concept 步骤1 用户将应用程序提交到ResourceManager上 步骤2 ResourceMana
  • Go语言面试题--基础语法(6)

    文章目录 1 关于init函数 下面说法正确的是 2 下面这段代码输出什么以及原因 3 下面这段代码能否编译通过 如果可以 输出什么 1 关于init函数 下面说法正确的是 A 一个包中 可以包含多个 init 函数 B 程序编译时 先执行
  • centOS7下Spark安装配置

    环境说明 操作系统 centos7 64位 3台 centos7 1 192 168 190 130 master centos7 2 192 168 190 129 slave1 centos7 3 192 168 190 131 sla
  • STM32端口功能详情图

    硬件接口对照表 注释标识 对应芯片IO 上下拉 功能 接口封装 电源归属 可外接IO 1 无 无 电源接口 DC 5 5 2 1 无 不可以 2 无 无 电源开关 无 3 无 无 电源接口 XT30 4 无 无 DC5V4A输出 USB母座
  • easycms v5.5 分析

    前言 这个awd打的悲 后台默认用户名密码为admin admin 但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼 都不知道这个cms是干嘛的 没用过相似的cms 虽然网上找出了很多相关的漏洞 但是不知道为什么一个都没用上 或者说

随机推荐

  • Qt画圆弧

    Qt画圆弧
  • 第三步:脑波提取alpha,beta,delta,theta

    4 brain power py import os from process eeg import iir processing import pandas as pd import numpy as np def mkdir path
  • shell编程--函数

    函数 定义格式 1 function name command1 commandn 2 function function name command1 commandn 注意 所有函数需要在使用前被定义 一般将函数定义放在脚本开始地方 自定
  • 华为OD机试 - 最长的完全交替连续方波信号(Java)

    题目描述 输入一串方波信号 求取最长的完全连续交替方波信号 并将其输出 如果有相同长度的交替方波信号 输出任一即可 方波信号高位用1标识 低位用0标识 如图 说明 一个完整的信号一定以0开始然后以0结尾 即010是一个完整信号 但101 1
  • 选Redis做MQ的人,是脑子里缺根弦儿吗?

    V xin ruyuan0330 获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 unack消息的积压问题 三 如何解决unack消息的积压问题 四 高并发场景下的内存溢出问题 五 低吞吐量问题 六 合理设置prefetch
  • 数据库查询出结果后将时间排序后取第一条

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 查询出结果后将时间排序后取第一条 select from a where time lt 2017 03 29 19 30 36 order by time desc li
  • Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1 Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括 数据库 文件 表 试图 Hive默认可以直接加载文本文件 TextFile 还支持sequence file 创建表时
  • windows11 打开chrome浏览器闪屏黑屏问题

    windows11 家庭版打开chrome浏览器的时候 电脑闪屏 甚至长时间黑屏 不得不重启 修复方法 在Google Chrome中禁用 平滑滚动 1 打开chrome 然后输入在地址栏输入 chrome flags 2 搜索名为Smoo
  • 8招搞定XenServer虚拟机优化

    XenServer是一款虚拟机软件 他的免费版本功能相对强大 相比VMware的ESXi来说 所以现在很多企业简单应用上都会用这款软件 以减小开支 VMware收费实在是太贵了 一般的企业是承担不起的 一般虚拟化之后 一台宿主机上面都会运行
  • 也说MSDN

    看到iCynosure在介绍 MSDN使用经验 忍不住也进来加两句 平时很喜欢在IE里面用alt D来切换到地址栏 但是MSDN Explorer不支持这个快捷方式 经过一番研究发现可以通过Option里面的keyboard来自定义快捷键
  • react基础04--redux 管理数据

    react基础04 redux 管理数据 1 介绍 2 方法 案例 在多个组件中使用Store中的数据 规范 store 写法 修改Store中的数据 refs属性获取元素对象 redux thunk 中间件 3 注意事项 4 说明 1 介
  • 怎么在蓝桥杯多拿点分

    蓝桥杯常考的算法有 1 枚举 暴力 2 递归 3 贪心 4 搜索 dfs和bfs 等基础算法 难度比较大的是动态规划 严格按要求输出 不要画蛇添足地打印类似 请您输入 的多余内容 能用到的函数 比如sort next permutation
  • Matplotlib可视化(2)设置pyplot的rcParams

    pylot使用rc配置文件来自定义图形的各种默认属性 称之为rc配置或rc参数 通过rc参数可以修改默认的属性 包括窗体大小 每英寸的点数 线条宽度 颜色 样式 坐标轴 坐标和网络属性 文本 字体等 rc参数存储在字典变量中 通过字典的方式
  • 2.线程常见方法

    Java多线程文章目录 目录 设置优先级 join方法 sleep方法 sleep 实现秒表功能 常见面试题 setDaemon方法 设置优先级 同优先级别的线程 采取的策略就是先到先服务 使用时间片策略 如果优先级别高 被CPU调度的概率
  • Clion-安装

    Clion安装 1 注册Jetbraions账号 https www jetbrains com 2 学生认证使用 baipiao 一年 https www jetbrains com shop eform students 3 下载Min
  • Postman提取返回值

    json响应结果 Postman是做接口测试的 但是很多接口并不是直接就能测试的 需要一些预处理 比如登录的时候 需要传递一个token 如果是网页测试 一般打开登录页面的时候就会自动生成一个token 如果返回的是json格式 用Post
  • 4 SpringBoot整合RocketMQ实现消息发送和接收

    我们使用主流的SpringBoot框架整合RocketMQ来讲解 使用方便快捷 最终项目结构如下 具体步骤如下 第一步 我们新建一个父项目rocketmq test pom类型 主要是依赖管理 包括版本的管理 以及管理module子项目 p
  • pygame库基础模块汇总

    目录 1 安装 2 使用 3 display显示模块 4 draw模块 5 event模块 event可以判断的事件 键盘事件key 6 font模块 7 time模块 8 基本框架 Pygame 是一个专门用来开发游戏的 Python 模
  • Qt+OpenGL——屏幕坐标转OpenGL归一化后的坐标

    OpenGL在显示图形时是将坐标转化为以屏幕中心为原点的一个坐标系 屏幕显示区域的x y轴的取值区间都是 1 1 如图 Qt界面的坐标系是以左上角为原点的坐标系 将鼠标点击的点转化为OpenGL坐标的算法较为简单 不再赘述直接以代码的形式进
  • 100个经典C语言程序(益智类)

    100个经典C语言程序 益智类 1 绘制余弦曲线 在屏幕上用 显示0 360度的余弦函数cos x 曲线 问题分析与算法设计 利用cos x 的左右对称性 将屏幕的行方向定义为x 列方向定义为y 则0 180度的图形与180 360度的图形