#include
using namespace std;
int a,b;
int work(int a,int b){
if (a%b)
return work(b,a%b);
return b;
}
int main(){
cin >> a >> b;
cout << work(a,b) << endl;
return 0;
}
输入:20 12
输出:4
解析:
主要考察函数递归调用
输入20,12 ,work函数的作用是:如果a求余b的值为true则进行函数递归调用
第一次20求余12 得 8 ,此时条件成立,继续执行work函数,传入参数12,8
第二次12求余8 得 4 ,此时条件成立,继续执行work函数,传入参数8,4
第三次4求余8 得 4 ,此时条件成立,继续执行work函数,传入参数4,4
第三次4求余4 得 0 ,此时条件不成立,结束循环
#include
using namespace std;
int main(){
int a[3],b[3];
int i,j,tmp;
for (i=0;i<3;i++)
cin >> b[i];
for (i=0;i<3;i++){
a[i]=0;
for (j=0;j<=i;j++){
a[i]+=b[j];
b[a[i]%3]+=a[j];
}
}
tmp=1;
for (i=0;i<3;i++){
a[i]%=10;
b[i]%=10;
tmp*=a[i]+b[i];
}
cout << tmp << endl;
return 0;
}
输入: 2 3 5
输出:416
解析:
主要考察数组和for循环
第一个for循环给数组b[0-2]赋值2 3 5。
第二个for循环的循环次数是3次,里面的嵌套循环的次数是1+2+3次
第一次循环:i = 0; a[0]=0; j=0; a[0] = a[0]+b[0]=2; b[2]=b[2]+a[0] = 7
第二次循环:i = 1; a[1]=0; j=0; a[1] = a[1]+b[0]=2; b[2]=b[2]+a[0] = 9
j=1; a[1]=a[1]+b[1]=5; b[2]=b[2]+a[1] = 14
第三次循环:i = 2; a[2]=0; j=0; a[2] = a[2]+b[0]=2; b[2]=b[2]+a[0] = 16
j=1; a[2] = a[2]+b[1]=5; b[2]=b[2]+a[0] = 21
j=2; a[2] = a[2]+b[2]=26; b[2]=b[2]+a[0] = 47
此时数组a[0] = 2 ; a[1] = 5 ; a[2] = 26 ; b[0] = 2 ; b[1]= 3 ; b[2] = 47
第四个for循环的循环次数是3次,每次对a[1-2]和b[1-2]求余取和,然后相乘得结果
tmp 三次变化分别是:4,32,416
#include
using namespace std;
const int c=2009;
int main(){
int n,p,s,i,j,t;
cin >> n >> p;
s=0;t=1;
for(i=1;i<=n;i++)
{
t=t*p%c;
for(j=1;j<=i;j++)
s=(s+t)%c;
}
cout << s << endl;
return 0;
}
输入:11 2
输出: 782
解析:
主要考察for循环
n = 11,p = 2; s = 0;t=1;
外层for循环一共循环10次,里层for循环一共循环1 ,2,3…10次
每次的变化如下:
t = 1 * 2 % 2009 = 2 S = 2 % 2009 = 2
t = 2 * 2 % 2009 = 4 S = 6 % 2009 = 6 S =10 % 2009 = 10
…
每次 for循环中 t 的值分别为:2、4、8、16、32、64、128、256、512、1024、39
这里%的优先级比 * 高
每次 for循环后 s 的值分别为:2、10、34、98、258、642、1538、1577、158、353、782
#include
using namespace std;
const int maxn=50;
void getnext(char str[]){
int l=strlen(str),i,j,k,temp;
k=l-2;
while(k>=0&&str[k]>str[k+1]) k--;
i=k+1;
while(i<l&&str[i]>str[k]) i++;
temp=str[k];
str[k]=str[i-1];
str[i-1]=temp;
for(i=l-1;i>k;i--)
for(j=k+1;j<i;j++)
if(str[j]>str[j+1]){
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
return ;
}
int main(){
char a[maxn];
int n;
cin >> a >> n;
while(n>0){
getnext(a);
n--;
}
cout << a << endl;
return 0;
}
输入:NOIP 3
输出:NPOI
解析:
主要考察