个人总结(杂。不定期更新)

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]赋值memseta,-1,sizeof(int )*5

(注:1,函数解释:将s中当前位置后面的n个字节用 ch 替换并返回 s 2int 数组只能初始化为0或者-13ch范围: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值不变的返回上一层循环导致循环终止,缺少数据输出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值