数据从常量变成变量的时候,需要变量.
int main(){
printf("%d",23*45);
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a*b);
}
语句的使用次数从常量变成变量的时候,需要循环.
变量的个数从常量变成变量的时候,需要数组.
int main(){
int a,b,c,d,e;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
scanf("%d", &d);
scanf("%d", &e);
}
int main(){
int n;
int arr[100];
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&arr[i]);
}
循环的嵌套次数从常量变成变量的时候,需要递归
int main(){
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
for(int k=0;k<3;++k)
for(int m=0;m<3;++m)
do_something(i,j,k,m);
}
int arr[100];
int n;
void dfs(int ix){
if(ix==n) do_something(arr,n);
for(int i=0;i<3;++i){
arr[ix]=i;
dfs(ix+1);
}
}
int main(){
scanf("%d",&n);
dfs(0);
}
一段代码里的变量名字从常量变成变量的时候,需要函数.
int main(){
int arr1[5]={2,1,5,4,3};
int arr2[6]={3,5,6,1,4,2};
int n1=5;
int n2=6;
for(int i=0;i<n1;++i)
for(int j=0;j<n1-1;++j)
if(arr1[j]>arr1[j+1])
swap(arr1[j],arr1[j+1]);
for(int i=0;i<n2;++i)
for(int j=0;j<n2-1;++j)
if(arr2[j]>arr2[j+1])
swap(arr2[j],arr2[j+1]);
}
void sort(int arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
int main(){
int arr1[5]={2,1,4,5,3};
int arr2[6]={3,5,6,1,4,2};
sort(arr1,5);
sort(arr2,6);
}
一段代码从常量变成变量,需要函数指针.
void sort1(int arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
void sort2(int arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]<arr[j+1])
swap(arr[j],arr[j+1]);
}
int main(){
int arr1[5]={2,1,4,5,3};
int arr2[6]={3,5,6,1,4,2};
sort1(arr1,5);
sort2(arr2,6);
}
bool less(int a,int b){
return a<b;
}
bool greater(int a,int b){
return a>b;
}
void sort(int arr[],int n,bool (*cmp)(int,int)){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(cmp(arr[j],arr[j+1]))
swap(arr[j],arr[j+1]);
}
int main(){
int arr1[5]={2,1,4,5,3};
int arr2[6]={3,5,6,1,4,2};
sort(arr1,5,greater);
sort(arr2,6,less);
}
函数的参数个数从常量变成变量,需要可变参数列表.
int sum1(int a,int b,int c){
return a+b+c;
}
int sum2(int a,int b,int c,int d){
return a+b+c+d;
}
int main(){
int a=sum1(1,2,3);
int b=sum2(1,2,3,4);
}
int sum(int n,...){
//just for 32bits system
int* pa=&n;
int ret=0;
++pa;
for(int i=0;i<n;++i)
ret+=*(pa+i);
return ret;
}
int main(){
int a=sum(3,23,13,20);
int b=sum(4,12,13,14,15);
}
函数的参数类型从常量变成变量,需要类模板,继承与多态.
(PS:类模版本质上还是常量,继承与多态也只是某种程度上成为变量)
void sort1(int arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
void sort2(double arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
int main(){
int arr1[5]={2,1,4,5,3};
double arr2[6]={3.1,5.2,6.3,1.4,4.5,2.6};
sort1(arr1,5);
sort2(arr2,6);
}
template<class sort_type>
void sort(sort_type arr[],int n){
for(int i=0;i<n;++i)
for(int j=0;j<n-1;++j)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
int main(){
int arr1[5]={2,1,4,5,3};
double arr2[6]={3.1,5.2,6.3,1.4,4.5,2.6};
sort(arr1,5);
sort(arr2,6);
}
class A{
public:
A(){x=0;}
virtual void func()=0;
int x;
};
class B:public A{
public:
void func(){++x;}
};
class C:public A{
public:
void func(){--x;}
};
void do_something(A& a){
a.func();
printf("%d\n",a.x);
}
int main(){
B b;
C c;
do_something(b);
do_something(c);
}