【小课堂】参考答案

1.1

C++:

1
2
3
4
5
6
#include<iostream>
using namespace std;
int main(){
cout<<"#\n##\n###\n####\n#####"<<endl;
return 0;
}

C:

1
2
3
4
5
#include<stdio.h>
int main(){
printf("#\n##\n###\n####\n#####");
return 0;
}

1.2

C++:

1
2
3
4
5
6
#include<iostream>
using namespace std;
int main(){
cout<<1024*512<<endl;
return 0;
}

C:

1
2
3
4
5
#include<stdio.h>
int main(){
printf("%d\n",1024*512);
return 0;
}

2.1

C++:

1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}

C:

1
2
3
4
5
6
7
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
}

2.2

C++:

1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;
int main(){
double r,pi=3.14159265;
cin>>r;
cout<<"s="<<pi*r*r<<",c="<<2*pi*r<<endl;
return 0;
}

C:

1
2
3
4
5
6
7
#include<stdio.h>
int main(){
double r,pi=3.14159265;
scanf("%lf",&r);
printf("s=%.2lf,c=%.2lf",pi*r*r,2*pi*r);
return 0;
}

2.3

C++:

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double a,b,c,d,x1,x2;
cin>>a>>b>>c;
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"x1="<<x1<<",x2="<<x2<<endl;
return 0;
}

C:

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<math.h>

int main(){
double a,b,c,d;
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;
printf("x1=%lf,x2=%lf",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
return 0;
}

3.1

1
2
3
4
5
6
7
8
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
if(n%3==0)printf("YES");
else printf("NO");
return 0;
}

3.2

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main(){
int n,a,b,c,d;
scanf("%d",&n);
a=n/100;
b=n/10%10;
c=n%10;
d=a*a*a+b*b*b+c*c*c;
if(n<1000&&d==n)printf("YES");
else printf("NO");
return 0;
}

3.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main(){
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a<b){
t=a;
a=b;
b=t;
}
if(b<c){
t=b;
b=c;
c=t;
}
if(a<b){
t=a;
a=b;
b=t;
}
printf("%d %d %d",a,b,c);
return 0;
}

3.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main(){
int m,n,d=1;
scanf("%d%d",&m,&n);
if(m>1)d+=31;
if(m>2)d+=28;
if(m>3)d+=31;
if(m>4)d+=30;
if(m>5)d+=31;
if(m>6)d+=30;
if(m>7)d+=31;
if(m>8)d+=31;
if(m>9)d+=30;
if(m>10)d+=31;
if(m>11)d+=30;
d+=n;
d%=7;
printf("%d",d);
return 0;
}

3.5

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
int n;
float f=0;
scanf("%d",&n);
if(n<=150)f=n*0.4463;
else if(n<=400)f=150*0.4463+(n-150)*0.4663;
else f=150*0.4463+250*0.4663+(n-400)*0.5663;
printf("%.1f",f);
return 0;
}

4.1.1

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
int i,j,m,n;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
printf("*");
printf("\n");
}
return 0;
}

4.1.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h> 
int main(){
int n,a,b,t,i=1;
scanf("%d",&n);
a=1;
b=1;
i=2;
while(i<n){
t=a+b;
a=b;
b=t;
i++;
}
printf("%d",b);
return 0;
}

4.1.3

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<math.h>
int main(){
int x,i,flag=1;
scanf("%d",&x);
for(i=2;i<=sqrt(x);i++)
if(x%i==0)flag=0;
if(flag&&x!=1) printf("yes");
else printf("no");
return 0;
}

4.1.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h> 
int main(){
float a,b,c,s,i=0;
scanf("%f",&a);
c=a;
while(a!=-1){
s=s+a;
if(a>b)b=a;
if(a<c)c=a;
i++;
scanf("%f",&a);
}
printf("%f %f %f",s/i,b,c);
return 0;
}

4.1.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,j;
scanf("%d",&n);
for(i=1;i<=2*n-1;i++){
for(j=1;j<=abs(n-i);j++)
printf(" ");

for(j=1;j<=2*(n-abs(n-i))-1;j++)
printf("%c",n-abs(n-i)-abs(n-abs(n-i)-j)+64);//对称中心n-abs(n-i)

printf("\n");
}
return 0;
}

4.2.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;

int main(){
int n,a[200];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];

for(int i=n;i>=1;i--)
cout<<a[i]<<" ";

return 0;
}

4.2.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;

int main(){
int n,m,k,a[200];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
cin>>m>>k;

for(int i=n;i>=m;i--)
a[i+1]=a[i];
a[m]=k;

for(int i=1;i<=n+1;i++)
cout<<a[i]<<" ";

return 0;
}

4.2.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;

int main(){
int n,a[200],t;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];

for(int i=1;i<=n;i++)
for(int j=n;j>i;j--)
if(a[j]<a[j-1]){
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}

for(int i=1;i<=n;i++)
cout<<a[i]<<" ";

return 0;
}

4.2.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;

int main(){
int n,m,a[100][100];
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[j][i];

for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}

return 0;
}

4.2.5

普通版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<cstdio.h>

int main(){
int n,a[100][100]={0},b,c,i=0,j=0;
bool flag=false;
scanf("%d",&n);
for(int s=1;s<=n*n;s++){
a[i][j]=s;
if(flag){j--;i++;}
else{j++;i--;}

if(i<0){
i++;
flag=true;
}
if(j<0){
j++;
flag=false;
}
if(j>=n && i<=0 && flag)i--;
if(i>=n && j<=0 && !flag)j--;
if(j>=n){i+=2;j--;flag=true;}
if(i>=n){j+=2;i--;flag=false;}
}

for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}

状态机版(供参考):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
int n,a[100][100];
int sx[5]={0,0, 1,1,-1},
sy[5]={0,1,-1,0, 1};//状态机状态
int x=1,y=1,dx=sx[1],dy=sy[1];//起始状态
bool switchflag=false;
scanf("%d",&n);

for(int now=1;now<=n*n;now++){
a[x][y]=now;
x+=dx;
y+=dy;
if(n%2==0 && x==n)switchflag=true;
if(n%2==1 && y==n)switchflag=true;//切换
if(!switchflag){//状态机1
if(dx==sx[1]&&dy==sy[1]){//状态1
dx=sx[2];dy=sy[2];//转到状态2
}
else if(dx==sx[2]&&dy==sy[2]){//状态2
if(y==1){dx=sx[3];dy=sy[3];}//转到状态3
}
else if(dx==sx[3]&&dy==sy[3]){//状态3
dx=sx[4];dy=sy[4];//转到状态4
}
else{//状态4
if(x==1){dx=sx[1];dy=sy[1];}//转到状态1
}
}
else{//状态机2
if(dx==sx[1]&&dy==sy[1]){//状态1
dx=sx[4];dy=sy[4];//转到状态4
}
else if(dx==sx[2]&&dy==sy[2]){//状态2
if(x==n){dx=sx[1];dy=sy[1];}//转到状态1

}
else if(dx==sx[3]&&dy==sy[3]){//状态3
dx=sx[2];dy=sy[2];//转到状态2
}
else{//状态4
if(y==n){dx=sx[3];dy=sy[3];}//转到状态3
}
}
}

for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}

5.1.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n){
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)return false;
return true;
}

int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++)
if(isprime(i))cout<<i<<" ";

return 0;
}

5.1.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n){
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)return false;
return true;
}

bool ispalindrome(int n){
int x=n,y=0;
while(x>0){
y=y*10+x%10;
x/=10;
}
return y==n;
}

int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++)
if(isprime(i)&&ispalindrome(i))
cout<<i<<" ";

return 0;
}

5.1.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
int factorial(int x){
int s = 1;
for(int i=2;i<=x;i++)
s *= i;
return s;
}

int combinatorial(int n,int m){
return factorial(n)/(factorial(m)*factorial(n-m));
}

int main(){
int n,m;
cin>>n>>m;
cout<<combinatorial(n,m);
return 0;
}

5.1.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
using namespace std;
int a[1000];

void sortxy(int x,int y){
int t;
for(int i=x;i<=y;i++)
for(int j=y;j>i;j--)
if(a[j]<a[j-1]){
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}

int main(){
int n,x,y;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
cin>>x>>y;

sortxy(x,y);

for(int i=1;i<=n;i++)
cout<<a[i]<<" ";

return 0;
}

5.1.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
using namespace std;

int a[100],len;

void change(int x){
len = 1;
while(x>1){
a[len]=x%2;
x/=2;
len++;
}
a[len]=x;
}

void printb(int x){
for(int i=x;i>=1;i--)
cout<<a[i];
}

int main(){
int n;
cin>>n;
change(n);
printb(len);
return 0;
}

5.2.1

1
2
3
4
5
6
7
func(1) = 1
func(2) = 2
func(3) = func(1) - func(2) = -1
func(4) = func(2) - func(3) = 3
func(5) = func(3) - func(4) = -4
func(6) = func(4) - func(5) = 7
func(7) = func(5) - func(6) = -11

5.2.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
r1 = 1
r2 = 2
r3 = 3
r4 = 4
r5 = 5
r6 = -1 //循环内r1到r5均大于0,故返回-1
r7 = 1 //循环执行到i=1,即r6<0成立,故返回1,下同理
r8 = 2
r9 = 3
r10 = 4
r11 = 5
r12 = -1
r13 = 1
r14 = 2
r15 = 3
r16 = 4

5.2.3

1
2
3
4
5
int Ackermann(int m,int n){
if(m==0)return n+1;
if(n==0)return Ackermann(m-1,n+1);
return Ackermann(m-1,Ackermann(m,n-1));
}

5.2.4

1
2
3
4
int sum(int n){
if(n==1)return 3;
return 2*n+1+sum(n-1);
}

5.2.5

1
2
3
4
5
void func(int n){
if(n==0)return;
cout<<n%10;
func(n/10);
}

5.2.6

1
2
3
4
5
void func(int n){
if(n==0)return;
func(n/2);
cout<<n%2;
}

6.1

C:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
#include<string.h>
int main(){
int n,i,l;
char t[100];
scanf("%d",&n);
scanf("%s",t);
l=strlen(t);
for(i=0;i<l;i++){
printf("%c",(t[i]-'a'+n)%26+'a');
}
return 0;
}

C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<string>
using namespace std;

int main(){
int n,l;
string t;
cin>>n>>t;
l=t.length();
for(int i=0;i<l;i++)
t[i]=(t[i]-'a'+n)%26+'a';

cout<<t;
return 0;
}

6.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int l=0,r=0,i,len,f=1;
char s[300];
scanf("%s",s);
len=strlen(s);
for(i=0;i<len;i++){
if(s[i]=='(')l++;
if(s[i]==')')r++;
if(r>l){f=0;break;}
}
if(l!=r)f=0;
if(f)printf("YES");
else printf("NO");
return 0;
}

6.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<string>
using namespace std;

int main(){
string s;
cin>>s;
int l=s.length();
int ans=0,num;
for(int i=l-1;i>=0;i--){
if(s[i]>='0'&&s[i]<='9'){
num=s[i]-'0';
}
else if(s[i]=='+'){
ans+=num;
}
else if(s[i]=='-'){
ans-=num;
}
}
ans+=num;
cout<<ans;
return 0;
}

6.4

* 此法为逆波兰表达式后缀表达式)求值,仅供参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include<iostream>
#include<string>
using namespace std;
string s;
int l;

int st[1000],head=0;
void push(int t){
st[head]=t;
head++;
}

int top(){
return st[head-1];
}

bool empty(){
if(head>0)return false;
return true;
}

void pop(){
head--;
}

void MidToPost(){
string t(s);
int p=0;
for(int i=0;i<l;i++){
switch(s[i]){
case '*':
case '/':
push(s[i]);
break;
case '+':
case '-':
while(!empty()){
t[p]=top();
p++;
pop();
}
push(s[i]);
break;
default:
t[p]=s[i];
p++;
}
}
while(!empty()){
t[p]=top();
p++;
pop();
}

s=t;
}

int oper(int a,int b,char o){
switch(o){
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
}

int calculate(){
int left,right;
for(int i=0;i<l;i++){
switch(s[i]){
case '+':
case '-':
case '*':
case '/':
right=top();
pop();
left=top();
pop();
push(oper(left,right,s[i]));
break;
default:
push(s[i]-'0');
}
}
return top();
}

int main(){
cin>>s;
l=s.length();
MidToPost();
cout<<calculate();
return 0;
}

6.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include<iostream>
#include<string>
#include<stack>
using namespace std;

string s;
int l;

int postExpr[1000];
bool isOper[1000];
int vlen=0;

int st[1000],head=0;
void push(int t){
st[head]=t;
head++;
}

int top(){
return st[head-1];
}

bool empty(){
if(head>0)return false;
return true;
}

void pop(){
head--;
}

void MidToPost(){
int t,j;
for(int i=0;i<l;i++){
switch(s[i]){
case '*':
case '/':
push(s[i]);
break;
case '+':
case '-':
while(!empty()){
postExpr[vlen]=top();
isOper[vlen]=true;
vlen++;
pop();
}
push(s[i]);
break;
default:

t=0;
for(j=i;j<l;j++){
if(s[j]<'0'||s[j]>'9'){
i=j-1;
break;
}
t=10*t+s[j]-'0';
}
if(j==l)i=j;

postExpr[vlen]=t;
isOper[vlen]=false;
vlen++;
}
}
while(!empty()){
postExpr[vlen]=top();
isOper[vlen]=true;
vlen++;
pop();
}

}

int oper(int a,int b,char o){
switch(o){
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
}

int calculate(){
int left,right;
for(int i=0;i<vlen;i++){
if(isOper[i]){
right=top();
pop();
left=top();
pop();
push(oper(left,right,postExpr[i]));
}
else push(postExpr[i]);
}
return top();
}

int main(){
cin>>s;
l=s.length();
MidToPost();
cout<<calculate();
return 0;
}

8.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1000],b[1000],c[1000];

int numcmp(char s1[],char s2[]){//a>b 1 a=b 0 a<b -1
if(strcmp(a,b)==0)return 0;
int al=strlen(s1),bl=strlen(s2);
if(al>bl)return 1;
if(al<bl)return -1;
//al==bl:
for(int i=0;i<al;i++)
if(s1[i]>s2[i])return 1;
else if(s1[i]<s2[i])return -1;
return 0;
}

void sub(char s1[],char s2[],char ans[]){
int cmp=numcmp(s1,s2);
bool nega=0;
if(cmp==0){
strcpy(ans,"0");
return;
}
if(cmp<0){
char t[1000];
strcpy(t,s1);
strcpy(s1,s2);
strcpy(s2,t);
nega=1;
}

int al=strlen(s1),bl=strlen(s2),pa=al-1,pb=bl-1;
short a[1000]={0},b[1000]={0};
int i,j,jw=0,t1,t2=0;

for(i=0;i<al;i++)
a[i]=s1[al-1-i]-'0';

for(i=0;i<bl;i++)
b[i]=s2[bl-1-i]-'0';

t1=max(al,bl);
for(i=0;i<t1;i++){
a[i]-=jw;
jw=0;
if(a[i]<b[i]){
a[i]+=10;
jw++;
}
a[i]=a[i]-b[i];
}

while(a[i]==0)i--;
if(nega){
ans[t2]='-';
t2++;

}
for(;i>=0;i--){
ans[t2]=a[i]+'0';
t2++;
}
ans[t2]='\0';
}

int main(){
scanf("%s%s",a,b);
sub(a,b,c);
puts(c);
return 0;
}

8.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1000],b[1000],c[1000];

void add(char s1[],char s2[],char ans[]){
if(s1[0]=='0'&&s2[0]=='0'){
strcpy(ans,"0");
return;
}
int al=strlen(s1),bl=strlen(s2),pa=al-1,pb=bl-1;
short a[1000]={0},b[1000]={0};
int i,j,jw=0,t1,t2=0;

for(i=0;i<al;i++)
a[i]=s1[al-1-i]-'0';

for(i=0;i<bl;i++)
b[i]=s2[bl-1-i]-'0';

t1=max(al,bl);
for(i=0;i<t1;i++){
a[i]=a[i]+b[i]+jw;
jw=a[i]/10;
a[i]%=10;
}

a[i]=jw;
while(a[i]==0)i--;
for(;i>=0;i--){
ans[t2]=a[i]+'0';
t2++;
}
ans[t2]='\0';
}

void mul(char s1[],char s2[],char ans[]){
if(s1[0]=='0'||s2[0]=='0'){
strcpy(ans,"0");
return;
}

int al=strlen(s1),bl=strlen(s2),pa=al-1,pb=bl-1;
if(al<bl){
swap(s1,s2);
swap(al,bl);
}

short a[1000]={0},b[1000]={0},c[1000]={0};
char tans[1000]={0};
int i,j,k,jw=0,t1=0,t2=0;

for(i=0;i<al;i++)
a[i]=s1[al-1-i]-'0';

for(i=0;i<bl;i++)
b[i]=s2[bl-1-i]-'0';

strcpy(ans,"0");
for(i=0;i<bl;i++){
jw=0;
for(j=0;j<al;j++){
c[i+j]=a[j]*b[i]+jw;
jw=c[i+j]/10;
c[i+j]%=10;
}
c[i+j]=jw;
while(c[i+j]==0)j--;
t2=0;
for(j=i+j;j>=0;j--){
tans[t2]=c[j]+'0';
c[j]=0;
t2++;
}
tans[t2]='\0';
add(ans,tans,ans);
}

}

int main(){
scanf("%s%s",a,b);
mul(a,b,c);
puts(c);
return 0;
}

8.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
#include<cstdio>
using namespace std;
int a[200000]={0};

void QuickSort(int l,int r){
int i,j,mid,t;
i=l;
j=r;
mid=a[(i+j)/2];
do{
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j){
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}

}while(i<=j);
if(i<r)QuickSort(i,r);
if(j>l)QuickSort(l,j);
}

int main(){
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);

QuickSort(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);

return 0;
}

8.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;

int ans=0,a[9]={0},b[9]={0},c[9]={0},d[9]={0};

void eq(int i){
int j;
for(j=1;j<=8;j++)
if(!b[j] && !c[i-j] && !d[i+j]){
a[i]=j; b[j]=1; c[i-j]=1; d[i+j]=1;
if(i==8)ans++;
else eq(i+1);
b[j]=0;
c[i-j]=0;
d[i+j]=0;
}
}

int main(){
eq(1);
cout<<ans;
return 0;
}