1.求最大公因数。//递归
int gcd (int num1,int num2)
{
return num1%num2? gcd (num2,num1%num2):num2;
}
2.多组数据计数别忘了变量清零--memset
用 memset 函数可以给较大的结构体或数组清零。(头文件:<string.h> )
例:char a[20]清零: memset(a,0,20*sizeof(char)), int a[5]赋值memset(a,-1,sizeof(int )*5)
(注:1,函数解释:将s中当前位置后面的n个字节用 ch 替换并返回 s 。2,int 数组只能初始化为0或者-1,3,ch范围:0~255)
3.一个主函数可以有多个return 0-----有时候会比标记变量好用。(类比自己写的函数)
但是不建议这么做,因为挑错时候会不好找是哪个出口的问题。
4.求解三位数
将1,2,⋯ 9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,v;
bool a[10];
for(i=192;i<327;i++)
{
memset(a,0,sizeof(a));
v=0;
a[i%10]=a[i/10%10]=a[i/100]=1;
a[i*2%10]=a[i*2/10%10]=a[i*2/100]=1;
a[i*3%10]=a[i*3/10%10]=a[i*3/100]=1;
for(j=1;j<=9;j++)v+=a[j];
if(v==9)printf("%d %d %d \n",i,i*2,i*3);
}
return 0;
}
5.数组循环右移m次
可以先把数组移1次,循环m次,比直接移动m次要省心。
6.全局变量vs局部变量
全局变量默认初始值为0,当局部变量与全局变量重名时候,局部优先。
7."."和"->"的区别
结构体变量.数据
指针->数据
8.静态变量static
对于局部变量:
只初始化一次,下一次使用这个变量保留的是上一次的值。即使函数返回,数据依然不变。
若不赋初始值,默认为0,局部可见,全局占用内存。
对于全局变量:
编译器自动初始化。
静态全局变量只在本文件内有效。不像普通全局变量,可以用extern外部声明后直接使用。
例:求1!+2!+...+n!
#include <stdio.h>
double fact_s(int n)
{
static double f=1;
f=f*n;
return f;//上一次得到的是(n-1)!,这次就是n!
}
int main()
{
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%d=%.0lf\n",i,fact_s(i));
return 0;
}
9.输出多个数据,以空格分隔,末尾无多余空格
int t=0;
if(t!=0)printf(“ ”);
printf(“巴拉巴拉”);
t++;
10.排序
选择:
for(i=0;i<n-1;i++)//由小到大
{
index=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[index])index=j;
}
temp=a[index];
a[index]=a[i];
a[i]=temp;
}
冒泡://小到大
void bubbleSort(int score[], int n)
{
int i, j, t, flag;
for(i = 0; i < n - 1; i ++)
{
flag=0;
for(j=0;j<n-1-i;j++)
{
if(score[j]>score[j+1]
{
t=score[j];score[j]=score[j+1];score[j+1]=t;
flag=1;
}
}
if(flag==0)break;
}
}
11.二分法查找
条件:数据是有序排列
low=0;
high=n-1;//n:数据个数,因为是在数组中,所以high!=n
while(low<=high)
{
mid=(low+high)/2;
if(x==a[mid]) break;
else if(x<a[mid]) high=mid-1;
else low=mid+1;
}
if(low<=high)printf("index is %d\n",mid);
else printf("not found\n");
12.遇到输入字符或者字符串,注意是否需要清缓存
fflush(stdin):缓存区的内容全清除。
getchar():也行,一般情况下够用。
13.两堆有序数据,取交集
注意不要套用循环,费时
if((p->data)<(q->data))p=p->next;
else if((p->data)>(q->data))q=q->next;
else if((p->data)==(q->data))
{
p=p->next;q=q->next;
}//两组分别从小到大排序的数据,也从小到大取交集;
14.在递归、函数里慎将循环变量i定义成全局变量
容易出现某一次递归结束,i值不变的返回上一层循环导致循环终止,缺少数据输出。