1、
#include<stdio.h>
#include<stdlib.h>
struct s
{
int a[2014];
int i;
}str;
int main(void)
{
for(str.i=0;str.i<=2014;str.i++)
{
str.a[str.i]=rand()%2014;
printf("%d\n",str.i);
}
return 0;
}
这段代码运行的结果会是什么?
答案是无限循环,原因其实很简单,我们应该注意到结构体,对结构体有所了解的人就会明白,结构体中的成员变量在内存中是连续的,同时还会注意到问题出在了str.i<=2014;
这条语句,如果换成str.i<2014就不会有问题了,也就是说赋的值超出了数组范围,多出了一个,而多出的这个数就直接付给了i 变量,所以有的人刚开始就想i 一直增大总会超出2014的,结构却不是这样,一到2014时,i 变成了(rand()%2014)这个小于2014的值,而不会是2015了。
相同的结构体问题:
#include<stdio.h>
struct test
{
int i;
int j;
};
int main()
{
struct test t;
t.i=1;
t.j=2;
printf("t:%d, i:%d, j:%d\n", t, t.i, t.j);
}
这个的答案 代码打印是:"t:1, i:2, j:1 "
t 作为一个结构体名,它代表了所包含的所有的变量成员,并依此赋值给了前两个,t.i自然复制给了j,这样造成了我们的迷惑
2、关于数字反转法(采用递归法)
#include <iostream>
using namespace std;
void reverse(int n)
{
cout<<n%10;
if(n/10!=0)
reverse(n/10);
}
int main()
{
int n=123456;
reverse(n);
cout<<endl;
return 0;
}
这个递归方法还是比较容易理解,就是通过对10求余获得个位的数字
字符串反转(非递推):
#include<stdlib.h>
#include <iostream>
using namespace std;
void reverse(char *m)
{
int len=strlen(m);
char t;
for(int i=0;i<(len-1)/2;i++)
{
t=m[i];
m[i]=m[len-1-i];
m[len-1-i]=t;
}
}
int main()
{
char str[]="minus";
reverse(str);
cout<<str<<endl;
return 0;
}
这个我感觉比数字反转简单了很多,因为这个只要把握住下标就行了
快排算法:
def qsort(arr):
if len(arr) <= 1: return arr
return qsort([x for x in arr if x < arr[0]]) + [x for x in arr if x == arr[0]] + qsort([x for x in arr if x > arr[0]])
if __name__=='__main__':
a=[4,2,8,7,0,1,8,3]
b=qsort(a)
for i in b:
print i
这是python版,非常简洁,也很好理解:每次递归都是将arr中比第一个小的放前面,接着放第一个,然后放比第一个大的就ok了。
#include<iostream>
using namespace std;
int x[11]={4,2,6,1,8,9,5,3,-9,0,7};
void change(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
void sqsort(int l,int u)
{
if(u-l<0.01)
return;
int t=x[l];
int i=l;
int j=u+1;
while(true)
{
do
{
i++;
}while(i<=u && x[i]<t);
do
{
j--;
}while(x[j]>t&&j>l);
if(i>=j)
break;
change(x[i],x[j]);
}
change(x[l],x[j]);
sqsort(l,j-1);
sqsort(j+1,u);
}
int main()
{
for(int i=0;i<11;i++)
cout<<x[i]<<" ";
sqsort(0,10);cout<<endl;
for(int j=0;j<11;j++)
cout<<x[j]<<" ";
getchar();
return 0;
}
这是C++版本的快排,是最基础的方法,虽然相对于python代码量大,也相对容易理解