100道题,代码菜鸟教程里都有,只是记录一些输出和自己的理解(又是等成绩焦虑到要死的一天)

代码菜鸟里都有,只是记录一些输出和自己的理解

  1. 在这里插入图片描述

  2. 判断输入的值在那个范围中

    1. <10w return i*0.1
    2. 10w<i<20w return 10w*0.1+(i-10w)*0.075
  3. 需要思考数学方面

    1、则:x + 100 = n2, x + 100 + 168 = m2

    2、计算等式:m2 - n2 = (m + n)(m - n) = 168

    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

    4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

    5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

    6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

    7、接下来将 i 的所有数字循环计算即可。

  4. 类似分类讨论

  5. 图形设计

  6. 在这里插入图片描述

  7. 九九乘法表

  8. 一个乱码期盼

  9. 在这里插入图片描述

  10. 计算题,兔子,规律

    1. 1
    2. 1
    3. 1+1//老的+新生
    4. 2+1//
    5. 3+2
    6. 5+3
    7. 8+5
    8. 13+8
    9. 大于2之后为 上一轮的和+上上轮的和
    10. f1=f1+f2
    11. f2=f1+f2
  11. 素数 两个for

 for (i=101; i<=200; i++) 
    {
        for (j=2; j<i; j++) 
        {
        // 如果 j 能被 i 整除再跳出循环
            if (i%j==0) 
                break;
        }
    // 判断循环是否提前跳出,如果 j<i 说明在 2~j 之间,i 有可整除的数
     /*优化,减少循环次数*/
        if (j>=i) 
        {
            count++;
            printf("%d ",i);
        // 换行,用 count 计数,每五个数换行
            if (count % 5 == 0) 
            printf("\n");
        }
    }    
  1. 水仙花,笔试做过

    int main()
    {
        int i,x,y,z;
        for(i=100;i<1000;i++)
        {
            x=i%10;
            y=i/10%10;
            z=i/100%10;
            
            if(i==(x*x*x+y*y*y+z*z*z))
            printf("%d\n",i);
            
        }
        return 0;
    }
    
  2. 一个数分解成质数的和

  3. 分段

  4. 最大公约数和最大公倍数

(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;

(2)求最大公约数用辗转相除法(又名欧几里德算法)

1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。

2)算法描述:

第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。

  1. while((c=getchar())!='\n')
        {
            if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
                letters++;
            else if(c>='0'&&c<='9')
                digits++;
            else if(c==' ')
                spaces++;
            else
                others++;
        }
    
  2. 	t=a;
        while(n>0)
        {
            s+=t;
            a=a*10;
            t+=a;
            n--;
        }
    
  3. 因子之和 //第14题

  4. s=0;h=100;
    {
    s=h/2;
    h=h-s}
    
  5. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
    第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
    的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少

    • 倒推,从第十天1
    • day9 day10=day9/2-1 day9=(day10+1)*2
    • day8 = (day9+1)*2
    • …d1=(d2+1)*2
    • ​ d2=d1
  6. emmm

  7. 分成上下两个三角空白 然后for循环

  8. 分母为二,分子为一

    • a=a+i/j
    • temp=分母
    • 分子i=分子i+分母j
    • 分母j=temp
  9. m=m*a//a是a! m=a!

    sum+=m

  10. 递归 sum=j*fact(j-1)

  11. void palin(n)
    int n;
    {
        char next;
        if(n<=1) {
            next=getchar();
            printf("相反顺序输出结果\40:\40");
            putchar(next);
        } else {
            next=getchar();
            palin(n-1);
            putchar(next);
        }
    }
    
  12. 分析题目,用递推

  13.  	a=x/10000;        /*分解出万位*/
        b=x%10000/1000;   /*分解出千位*/
        c=x%1000/100;     /*分解出百位*/
        d=x%100/10;       /*分解出十位*/
        e=x%10;           /*分解出个位*/
    
  14. 用上面的,然后ae&&bd

  15. switch case

  16. // 删除字符串中指定字母函数
    char* deleteCharacters(char * str, char * charSet)
    {
        int hash [256];
        if(NULL == charSet)
            return str;
        for(int i = 0; i < 256; i++)
            hash[i] = 0;
        for(int i = 0; i < strlen(charSet); i++)
            hash[charSet[i]] = 1;
        int currentIndex = 0;
        for(int i = 0; i < strlen(str); i++)
        {
            if(!hash[str[i]])
                str[currentIndex++] = str[i];
        }
        str[currentIndex] = '\0';
        return str;
    }
    
  17. 判断质素

  18. int prime[MAX];
     
    int isPrimeNaive(int n)
    {
        if(n <= 1)
            return 0;
        for(int i = 2; i < n; i++)
            if(n % i == 0)
                return 0;
        return 1;
    }
     
    int isPrime(int n)
    {
        if(n<= 1)
            return 0;
        if(n == 2)
            return 1;
        if(n%2 == 0)
            return 0;
        int limit = (int)sqrt((double)n);
        for(int i = 3; i <= limit; i=i+2)
        {
            if(n % i == 0)
                return 0;
        }
        return 1;
    }
     
    void sieve()
    {
        prime[0] = 0;
        prime[1] = 0;
        for(int i = 2; i < MAX; i++)
            prime[i] = 1;
        int limit = (int)sqrt((double)MAX);
        for(int i = 2; i <= limit; i++)
        {
            if(prime[i])
                for(int j = i*i; j <= MAX; j+=i)
                    prime[j] = 0;
        }
    }
     
    int isPrimeSieve(int n)
    {
        if(prime[n])
            return 1;
        else
            return 0;
    }
    
  19. 一个简单的调用

  20. 类似于数据结构中的转换

    void reverse(char* s)
    {
        // 获取字符串长度
        int len = 0;
        char* p = s;
        while (*p != 0)
        {
            len++;
            p++;
        }
        
        // 交换 ...
        int i = 0;
        char c;
        while (i <= len / 2 - 1)
        {
            c = *(s + i);
            *(s + i) = *(s + len - 1 - i);
            *(s + len - 1 - i) = c;
            i++;
        }
    }
    
  21. 100内素数

    int i,j,k,n=0;
        for(i=2;i<=100;i++)
        {
            k=(int)sqrt(i);//降低时间,也可以不要,就j<100sqrt平方根
            for(j=2;j<=k;j++)
                if(i%j==0) break;
            if(j>k)
            {
                printf("%d ",i);
                n++;
                if(n%5==0)//一行5个
                    printf("\n");
            }
        }
    
  22. 排序

  23. int i,j,a[N][N],sum=0;
        printf("请输入矩阵(3*3):\n");
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
                scanf("%d",&a[i][j]);//输入
        for(i=0;i<N;i++)
            sum+=a[i][i];//对角线元素
        printf("对角线之和为:%d\n",sum);
        return 0;
    
  24. 插入

  25. 逆序输出,先排序,再交换,或者直接从大到小

  26. static的用法会存储上一次的数据

    1. 局部变量:
      局部变量就是在函数内定义的变量,普通的局部变量,生存周期是随着函数的结束而结束,每次函数重新执行,局部变量都是新的值,不会保留上次的值。当用static修饰后,局部变量的生存周期就是当程序结束才会结束。再次调用函数时,用static修饰的变量会保留上一次的值。
      应用:在函数内,我们想保留某些变量上一次的值,就可以用static去修饰该变量。比如:想统计该函数被执行的次数时,就可以定义被static修饰的int型变量,每执行一次该变量就++。
      总结:用static修饰的局部变量,改变了生存周期,但是没有改变其作用域。改变其生存周期的原因是被static修饰的局部变量被存放在.bss段或者.data段,而普通的局部变量是存放在栈上的。

    2. 全局变量:
      全局变量用static修饰改变了作用域,没有改变生存周期。普通的全局变量是可以被其他的.c文件引用的,一旦被static修饰,就只能被定义该全局变量的.c文件引用,使得该全局变量的作用范围减小。
      作用:当一个全局变量不想被其他.c文件引用时,可以用static修饰,这样其他的文件就不能通过extern的方式去访问,这样主要是为了数据安全。
      总结:改变其作用域,没有改变生存周期。

    3. 函数:
      函数用static修饰,改变了作用域。普通的函数是可以通过头文件声名的方式被其他文件调用,被static修饰后就只能在本文件里被调用,这样是为了数据的安全。
      作用:有些函数并不想对外提供,只需要在本文件里调用,这时候就可以用static去修饰。
      总结:改变了作用域,没有改变其生存周期。

  27. auto定义:初始值不变

#include <stdio.h>
int main()
{
    int i,num;
    num=2;
    for(i=0;i<3;i++)
    {
        printf("num 变量为 %d \n",num);
        num++;
        {
            auto int num=1;
            printf("内置模块 num 变量为 %d \n",num);
            num++;
        }
    }
    return 0;
}
num 变量为 2 
内置模块 num 变量为 1 
num 变量为 3 
内置模块 num 变量为 1 
num 变量为 4 
内置模块 num 变量为 1 
  1. static 会记录上一次的值,

  2. 调用外部函数

  3. register定义变量时间会短,register用来声明变量,然后声明出来的变量是直接放在cpu的寄存器当中,而非就是通过内存寻址访问,这样效率更高。register受限于cpu寄存器的大小

  4. 宏定义

  5. #ifdef MAX
        printf("更大的数字是 %d\n",MAXIMUM(a,b));
    #else
        printf("更小的数字是 %d\n",MINIMUM(a,b));
    #endif
    
  6. 头文件

  7. &与

  8. |或

  9. ^异或

  10. 右移,箭头方向

  11. ~按位取反

  12. graphics.h里的方法 circle画⚪

  13. line 画线

  14. rectangle(x0,y0,x1,y1);//方
    
  15. 杨辉三角

     for(i=0;i<10;i++) {
            a[i][0]=1;
            a[i][i]=1;
        }
        for(i=2;i<10;i++)
            for(j=1;j<i;j++)
                a[i][j]=a[i-1][j-1]+a[i-1][j];
        for(i=0;i<10;i++) {
            for(j=0;j<=i;j++)
                printf("%5d",a[i][j]);
            printf("\n");
        }
    
  16. putpixel(i,j,1);//画点
    
  17. ellipse(250,250,0,360,top,bottom);//椭圆
    
  18. #include "graphics.h"
    #include "math.h"
    #include "dos.h"
    #include "conio.h"
    #include "stdlib.h"
    #include "stdio.h"
    #include "stdarg.h"
    #define MAXPTS 15
    #define PI 3.1415926
    struct PTS {
        int x,y;
    };
    double AspectRatio=0.85;
    void LineToDemo(void)
    {
        struct viewporttype vp;
        struct PTS points[MAXPTS];
        int i, j, h, w, xcenter, ycenter;
        int radius, angle, step;
        double rads;
        printf(" MoveTo / LineTo Demonstration" );
        getviewsettings( &vp );
        h = vp.bottom - vp.top;
        w = vp.right - vp.left;
        xcenter = w / 2; /* Determine the center of circle */
        ycenter = h / 2;
        radius = (h - 30) / (AspectRatio * 2);
        step = 360 / MAXPTS; /* Determine # of increments */
        angle = 0; /* Begin at zero degrees */
        for( i=0 ; i<MAXPTS ; ++i ){ /* Determine circle intercepts */
            rads = (double)angle * PI / 180.0; /* Convert angle to radians */
            points[i].x = xcenter + (int)( cos(rads) * radius );
            points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio );
            angle += step; /* Move to next increment */
        }
        circle( xcenter, ycenter, radius ); /* Draw bounding circle */
        for( i=0 ; i<MAXPTS ; ++i ){ /* Draw the cords to the circle */
            for( j=i ; j<MAXPTS ; ++j ){ /* For each remaining intersect */
                moveto(points[i].x, points[i].y); /* Move to beginning of cord */
                lineto(points[j].x, points[j].y); /* Draw the cord */
            }
        }
    }
    int main()
    {
        int driver,mode;
        driver=CGA;mode=CGAC0;
        initgraph(&driver,&mode,"");
        setcolor(3);
        setbkcolor(GREEN);
        LineToDemo();
    }
    
  19. 判断+swap

  20. 查找最大并记录位置+swap

  21. 换位置

  22. /*笔试常考*/
    #include <stdio.h>
    void main()
    {
        int num[50],n,*p,j,loop,i,m,k;
        printf("请输入这一圈人的数量:\n");
        scanf("%d",&n);
        p=num;
        //开始给这些人编号
        for (j=0;j<n;j++)
        {
            *(p+j)=j+1;
        }
        i=0;//i用于计数,即让指针后移
        m=0;//m记录退出圈子的人数
        k=0;//k报数1,2,3
        while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人
            //这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
            //这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
        {
            if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
            {
                k++;
            }
            if (k==3)
            {    k=0;    //报数清零,即下一个人从1开始报数
                *(p+i)=0;//将报数为3的人编号重置为0
                m++;    //退出人数加1
            }
            i++;      //指针后移
            if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头
                //并且它只能放在i++后面,因为只有i++了才有可能i==n
            {
                i=0;
            }
            
            
        }
        printf("现在剩下的人是:");
        for (loop=0;loop<n;loop++)
        {
            if (num[loop]!=0)
            {
                printf("%2d号\n",num[loop]);
            }
        }
        
    }
    
  23. 字符长度的方法

    int length(char *s)  
    {  
        int i=0;
        while(*s!='\0')
        {  
            i++;   
            s++;  
        }  
        return i;  
    }
    
  24. 两个方法

  25. /*创建列表*/
    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    typedef struct LNode{
        int          data;
        struct LNode *next;
    }LNode,*LinkList;
     
    LinkList CreateList(int n);
    void print(LinkList h);
    int main()
    {
        LinkList Head=NULL;
        int n;
        
        scanf("%d",&n);
        Head=CreateList(n);
        
        printf("刚刚建立的各个链表元素的值为:\n");
        print(Head);
        
        printf("\n\n");
        system("pause");
        return 0;
    }
    LinkList CreateList(int n)
    {
        LinkList L,p,q;
        int i;
        L=(LNode*)malloc(sizeof(LNode));
        if(!L)return 0;
        L->next=NULL;
        q=L;
        for(i=1;i<=n;i++)
        {
            p=(LinkList)malloc(sizeof(LNode));
            printf("请输入第%d个元素的值:",i);
            scanf("%d",&(p->data));
            p->next=NULL;
            q->next=p;
            q=p;
        }
        return L;
    }
    void print(LinkList h)
    {
        LinkList p=h->next;
        while(p!=NULL){
            printf("%d ",p->data);
            p=p->next;
        }
    }
    
  26. 反向输出一个链表

  27. 链接两个链表

    #include <stdlib.h>
    #include <stdio.h>
    struct list
    {
        int data;
        struct list *next;
    };
    typedef struct list node;
    typedef node *link;
    link delete_node(link pointer,link tmp)
    {
        if (tmp==NULL) /*delete first node*/
            return pointer->next;
        else
        {
            if(tmp->next->next==NULL)/*delete last node*/
                tmp->next=NULL;
            else /*delete the other node*/
                tmp->next=tmp->next->next;
        return pointer;
        }
    }
    void selection_sort(link pointer,int num)
    {
        link tmp,btmp;
        int i,min;
        for(i=0;i<num;i++)
        {
            tmp=pointer;
            min=tmp->data;
            btmp=NULL;
            while(tmp->next)
            {
                if(min>tmp->next->data)
                {
                    min=tmp->next->data;
                    btmp=tmp;
                }
                tmp=tmp->next;
            }
            printf("\40: %d\n",min);
            pointer=delete_node(pointer,btmp);
        }
    }
    link create_list(int array[],int num)
    {
        link tmp1,tmp2,pointer;
        int i;
        pointer=(link)malloc(sizeof(node));
        pointer->data=array[0];
        tmp1=pointer;
        for(i=1;i<num;i++)
        {
            tmp2=(link)malloc(sizeof(node));
            tmp2->next=NULL;
            tmp2->data=array[i];
            tmp1->next=tmp2;
            tmp1=tmp1->next;
        }
        return pointer;
    }
    link concatenate(link pointer1,link pointer2)
    {
        link tmp;
        tmp=pointer1;
        while(tmp->next)
            tmp=tmp->next;
        tmp->next=pointer2;
        return pointer1;
    }
    int main(void)
    {
        int arr1[]={3,12,8,9,11};
        link ptr;
        ptr=create_list(arr1,5);
        selection_sort(ptr,5);
    }emmm
        
        
    
    1. 是一个判断奇数偶数数

    2. 奇数for (a ;a>1;a-2)sum=double 1/a

    3. 偶数for (a ;a>0;a-2)sum=double 1/a

  28. 找年龄最大,比较指针中存储的数据大小 m=p->age;

  29. 字符串排序 头文件里有方法 if(strcmp(str1,str2)>0)swap(str1,str2);

  30. 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int x
    ,i=0,j=1;
    while(i<5){
        x=4*j;
        for(i=0;i<5;i++)
        {
            if(x%4!=0){break;}
            x=(x/4)*5+1;
        }
        j++;
    }
    printf("%d\n",x);
    
    return 0;
}
  1. 没看懂C 练习实例81 | 菜鸟教程 (runoob.com)

  2. 进制转换

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n=0,i=0;
    char s[20];
    printf("请输入一个8进制数:\n");
    gets(s);
    while(s[i]!='\0'){
        n=n*8+s[i]-'0';
        i++;
    }
    printf("刚输入的8进制数转化为十进制为\n%d\n",n);
    
    return 0;
}
  1. 只考虑最后一位数,其他几位随意组合

  2. ????????????

  3. 字符串链接 有个方法

    char* strconnect(char *str1,char *str2)
    {
        char*str;
        str=(char*)malloc(strlen(str1)+strlen(str2)+1);
        str[0]='\0';
        strcat(str,str1);
        strcat(str,str2);
        return str;
    }
    
  4. emmm

  5. 密码,类似于

  6. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

    取出每一位数,然后按照要求再装填回去

  7. 时间

  8. 数字炸弹 ififfiif

  9. 结构体

    struct programming
    {
        float constant;
        char *pointer;
    };
    
  10. 计算字符串中子串出现的次数 。面试

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int i,j,k,TLen,PLen,count=0;
    char T[50],P[10];
    printf("请输入两个字符串,以回车隔开,母串在前,子串在后:\n");
    gets(T);
    gets(P);
    TLen=strlen(T);
    PLen=strlen(P);
    for(i=0;i<=TLen-PLen;i++)
    {
        for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
            ;
        if(j==PLen)count++;
    }
    printf("%d\n",count);
    system("pause");
    return 0;
}
  1. 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE*fp=NULL;
    char filename[25];
    char ch;
    printf("输入你要保存到的文件的名称:\n");
    gets(filename);
    if((fp=fopen(filename,"w"))==NULL)
    {
        printf("error: cannot open file!\n");
        exit(0);
    }
    printf("现在你可以输入你要保存的一些字符,以#结束:\n");
    getchar();
    while((ch=getchar())!='#'){
        fputc(ch,fp);
    }
    fclose(fp);
    system("pause");
    return 0;
}
  1. 大小写转换(人麻了,等考研成绩的一天,我是个小废物)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int main()
{
    FILE*fp=NULL;
    char str[50];
    int i,len;
    printf("输入一个字符串:\n");
    gets(str);
    len=strlen(str);
    for(i=0;i<len;i++)
    {
        if(str[i]<='z'&&str[i]>='a')
            str[i]-=32;
    }
    if((fp=fopen("test","w"))==NULL)
    {
        printf("error: cannot open file!\n");
        exit(0);
    }
    fprintf(fp,"%s",str);
    fclose(fp);
    
    system("pause");
    return 0;
}

矩阵交换

#include <iostream>
using namespace std;
int main()
{
    int a[5][5], m, n, i, j;
    for (i=0; i<5; i++)
        for (j=0; j<5; j++)
            cin >> a[i][j];
    cin >> m >> n;
    for (j=0; j<5; j++){
        i = a[m-1][j];
        a[m-1][j] = a[n-1][j];
        a[n-1][j] = i;
    }
    for (i=0; i<5; i++){
        for (j=0; j<5; j++){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;第二天又吃了一半,再加上一个;后面每天都是这样吃。到第10天的时候,小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。

#include<stdio.h>
 
int main()
{
    int i = 1;
    int j = 1;
    for (j = 10; j > 1;j --)
    {
        i++;
        i = 2 * i;
    }
    printf("第一天摘了 %d 个桃子。", i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值