代码菜鸟里都有,只是记录一些输出和自己的理解
-
判断输入的值在那个范围中
- <10w return i*0.1
- 10w<i<20w return 10w*0.1+(i-10w)*0.075
- …
-
需要思考数学方面
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 的所有数字循环计算即可。
-
类似分类讨论
-
图形设计
-
九九乘法表
-
一个乱码期盼
-
计算题,兔子,规律
- 1
- 1
- 1+1//老的+新生
- 2+1//
- 3+2
- 5+3
- 8+5
- 13+8
- …
- 大于2之后为 上一轮的和+上上轮的和
- f1=f1+f2
- f2=f1+f2
-
素数 两个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");
}
}
-
水仙花,笔试做过
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; }
-
一个数分解成质数的和
-
分段
-
最大公约数和最大公倍数
(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,并返回第一步。
-
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++; }
-
t=a; while(n>0) { s+=t; a=a*10; t+=a; n--; }
-
因子之和 //第14题
-
s=0;h=100; { s=h/2; h=h-s}
-
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少- 倒推,从第十天1
- day9 day10=day9/2-1 day9=(day10+1)*2
- day8 = (day9+1)*2
- …d1=(d2+1)*2
- d2=d1
-
emmm
-
分成上下两个三角空白 然后for循环
-
分母为二,分子为一
- a=a+i/j
- temp=分母
- 分子i=分子i+分母j
- 分母j=temp
-
m=m*a//a是a! m=a!
sum+=m
-
递归 sum=j*fact(j-1)
-
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); } }
-
分析题目,用递推
-
a=x/10000; /*分解出万位*/ b=x%10000/1000; /*分解出千位*/ c=x%1000/100; /*分解出百位*/ d=x%100/10; /*分解出十位*/ e=x%10; /*分解出个位*/
-
用上面的,然后ae&&bd
-
switch case
-
// 删除字符串中指定字母函数 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; }
-
判断质素
-
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; }
-
一个简单的调用
-
类似于数据结构中的转换
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++; } }
-
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"); } }
-
排序
-
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;
-
插入
-
逆序输出,先排序,再交换,或者直接从大到小
-
static的用法会存储上一次的数据
-
局部变量:
局部变量就是在函数内定义的变量,普通的局部变量,生存周期是随着函数的结束而结束,每次函数重新执行,局部变量都是新的值,不会保留上次的值。当用static修饰后,局部变量的生存周期就是当程序结束才会结束。再次调用函数时,用static修饰的变量会保留上一次的值。
应用:在函数内,我们想保留某些变量上一次的值,就可以用static去修饰该变量。比如:想统计该函数被执行的次数时,就可以定义被static修饰的int型变量,每执行一次该变量就++。
总结:用static修饰的局部变量,改变了生存周期,但是没有改变其作用域。改变其生存周期的原因是被static修饰的局部变量被存放在.bss段或者.data段,而普通的局部变量是存放在栈上的。 -
全局变量:
全局变量用static修饰改变了作用域,没有改变生存周期。普通的全局变量是可以被其他的.c文件引用的,一旦被static修饰,就只能被定义该全局变量的.c文件引用,使得该全局变量的作用范围减小。
作用:当一个全局变量不想被其他.c文件引用时,可以用static修饰,这样其他的文件就不能通过extern的方式去访问,这样主要是为了数据安全。
总结:改变其作用域,没有改变生存周期。 -
函数:
函数用static修饰,改变了作用域。普通的函数是可以通过头文件声名的方式被其他文件调用,被static修饰后就只能在本文件里被调用,这样是为了数据的安全。
作用:有些函数并不想对外提供,只需要在本文件里调用,这时候就可以用static去修饰。
总结:改变了作用域,没有改变其生存周期。
-
-
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
-
static 会记录上一次的值,
-
调用外部函数
-
register定义变量时间会短,register用来声明变量,然后声明出来的变量是直接放在cpu的寄存器当中,而非就是通过内存寻址访问,这样效率更高。register受限于cpu寄存器的大小
-
宏定义
-
#ifdef MAX printf("更大的数字是 %d\n",MAXIMUM(a,b)); #else printf("更小的数字是 %d\n",MINIMUM(a,b)); #endif
-
头文件
-
&与
-
|或
-
^异或
-
右移,箭头方向
-
~按位取反
-
graphics.h里的方法 circle画⚪
-
line 画线
-
rectangle(x0,y0,x1,y1);//方
-
杨辉三角
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"); }
-
putpixel(i,j,1);//画点
-
ellipse(250,250,0,360,top,bottom);//椭圆
-
#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(); }
-
判断+swap
-
查找最大并记录位置+swap
-
换位置
-
/*笔试常考*/ #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]); } } }
-
字符长度的方法
int length(char *s) { int i=0; while(*s!='\0') { i++; s++; } return i; }
-
两个方法
-
/*创建列表*/ #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; } }
-
反向输出一个链表
-
链接两个链表
#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
-
是一个判断奇数偶数数
-
奇数for (a ;a>1;a-2)sum=double 1/a
-
偶数for (a ;a>0;a-2)sum=double 1/a
-
-
?
-
找年龄最大,比较指针中存储的数据大小 m=p->age;
-
字符串排序 头文件里有方法 if(strcmp(str1,str2)>0)swap(str1,str2);
-
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
#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;
}
-
进制转换
#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;
}
-
只考虑最后一位数,其他几位随意组合
-
????????????
-
字符串链接 有个方法
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; }
-
emmm
-
密码,类似于
-
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
取出每一位数,然后按照要求再装填回去
-
?
-
时间
-
数字炸弹 ififfiif
-
结构体
struct programming { float constant; char *pointer; };
-
计算字符串中子串出现的次数 。面试
#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;
}
- 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
#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;
}
- 大小写转换(人麻了,等考研成绩的一天,我是个小废物)
#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);
}