Professional Documents
Culture Documents
1.1 程序设计概念
(1)略
(2)略
1.2 整数算术计算
(1)300 公顷
→求 1 台拖拉机 1 天耕地公顷数:90÷3÷3=10(公顷)90÷3÷3=10(公顷)
→求 5 台拖拉机 6 天耕地公顷数:10×5×6=300(公顷)10×5×6=300(公顷)
→列出综合算式: 90÷3÷3×5×6=300(公顷)90÷3÷3×5×6=300(公顷)
程序:
(2)3 次
→求 1 辆车 1 次可以运送的钢材量:100÷4÷5=5(吨)100÷4÷5=5(吨)
→求 7 辆车运送 105 吨钢材的次数: 105÷(5×7)=3(次)105÷(5×7)=3(次)
→列出综合算式: 105÷((100÷4÷5)×7)=3(次)105÷((100÷4÷5)×7)=3(次)
程序:
(3) 去掉 2 根,每班 7 根
→求每个班分到的绳子数:58÷8=7(根)...2(根)58÷8=7(根)...2(根)
→分到 7 根,余下两根
程序:
1.3 实数算数计算
(1)1.92 元
→求每只铅笔的价格:0.6÷5=0.12(元)0.6÷5=0.12(元)
→求 16 只铅笔的价格: 0.12×16=1.92(元)0.12×16=1.92(元)
→综合式子:16×(0.6÷5)=1.92(元)16×(0.6÷5)=1.92(元)
程序:
(2)904 套
→求原来需要的布的量:3.2×791=2531.2(m2)3.2×791=2531.2(m2)
→求改进后能做的量:2531.2÷2.8=904(套)2531.2÷2.8=904(套)
→综合式子:3.2×791÷2.8=904(套)3.2×791÷2.8=904(套)
程序:
(3)8 厘米
→求出正方形的面积:10×8−16=64(m2)10×8−16=64(m2)
→求出正方形的边长:64−−√=8(m)64=8(m)
→综合式子:10×8−16−−−−−−−−−√=8(m)10×8−16=8(m)
程序:
第 2 章 数据的存储和读入
2.1 变量和变量的类型
(1)
变量名 是否合法
3zh 否,数字不能开头
ant 是
_3cq 是
变量名 是否合法
my 是
Mycar 是
my_car 是
all 是
55a 否,数字不能开头
a_abc 是
daf-32 否,'-'不能构成变量名
x.13 否,'.'不能构成变量名
Var(3) 否,括号不能构成变量名
maxn 是
max&min 否,'&'不能构成变量名
(2) 略
(3) 略
2.2 赋值语句和数学表达式
(1) C
(2)
(A)y=m*x+b
(B)m=(a+b+c)/(e*f)
(C)a=sqrt((x-3*y)*z)
(D)a=(2*x-y)/(x+y*y)
(E)m=(x-y*z)/(2/c)
(3) C、E
(4)
表达式 值
++x x=11
--x x=9
y=--x y=9,x=9
x++ x=11
x-- x=9
y=5*x++ y=50,x=11
y=x--*2+3 y=23,x=9
(5-1)
434
443
(5-2)
20
(6)
ceil(3.14)=4 floor(3.14)=3
4^3.0=64
sqrt(9)=3
(7)
(8) 略
2.3 数据类型转换
(1)
1 -1
33
38
11 8
c=1
c=1.375
1 -2
3129,65,65,65.2,A
(2)
(3) 略
2.4 变量的读入
(1)
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double f;
cin>>f;
printf("%.4f",(f-32)*5/9);
return 0;
}
(2)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
if(a+b<c) cout<<"NO";
else{
if(a==b&&b==c){
cout<<"Equilateral";
}else if(a*a+b*b==c*c){
cout<<"Right";
}else{
cout<<"General";
}
}
return 0;
}
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int x;
cin>>x;
x=x*1000+x;
cout<<x/7/11/13;
return 0;
}
(1)
1 -1
a=202
2*a=404
a=202
2323.343450
2323.34
2323.34
2323.34
1-2
1, 1,001,123,123 ,00123
2.6 顺序结构程序设计实例
(1)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
long long n,m,a;
cin>>n>>m>>a;
cout<<(n/a)*(m/a);
return 0;
}
(2)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
double r,x,p;
cin>>r>>x>>p;
printf("%.2f",x*pow(((100+r)/100),p));
return 0;
}
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<20-a-b-c;
return 0;
}
(4)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
double a,b;
cin>>a>>b;
printf("%.2f",a-int(a/b)*b);
return 0;
}
(5)略
第 3 章 程序的选择执行
3.1 if 语句和关系表达式
(1)
1-1
输入 输出
55 5
56 6
输入 输出
65 5
1-2
输入 输出
55 5
56 Unequal
65 Unequal
(2)
2-1
输入 输出
57 0
76 2
2-2
输入 输出
57 5
76 2
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
cin>>n;
int gw=n%10;
int sw=n/10%10;
int bw=n/100;
if(n==gw*gw*gw+sw*sw*sw+bw*bw*bw){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}
3.2 逻辑表达式和条件表达式
(1)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int m,f;
cin>>m>>f;
if(m+f<10){
cout<<"water";
}else if(m+f>=10&&m>f){
cout<<"tree";
}else{
cout<<"tea";
}
return 0;
}
(2)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int w;
cin>>w;
if(w<=10){
printf("%.2f",w*0.8+0.2);
}else if(w<=20){
printf("%.2f",0.8*10+0.75*(w-10)+0.2);
}else if(w<=30){
printf("%.2f",0.8*10+0.75*10+0.7*(w-20)+0.2);
}else{
printf("Fail");
}
return 0;
}
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
double x,y;
cin>>x>>y;
if(x>=-1&&x<=1&&y>=-1&&y<=1){
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}
(4)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
cin>>n;
int r=n%123;
if(r>=97&&r<=122){
cout<<char(r);
}else{
r=n%91;
if(r>=65&&r<=90){
cout<<char(r);
}else{
cout<<'*';
}
}
return 0;
}
3.3 嵌套 if 语句
(1)
程序段 1
数据 输出
x=3,y=2 无
x=2,y=3 x=2
x=3,y=4 z =7
x=2,y=2 x=2
x=3,y=3 z =6
程序段 2
数据 输出
x=3,y=2 x=3
x=2,y=3 无
x=3,y=4 z =7
x=2,y=2 无
x=3,y=3 z =6
(2)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
if(a+b<c) cout<<"NO";
else{
if(a==b&&b==c){
cout<<"Equilateral";
}else if(a*a+b*b==c*c){
cout<<"Right";
}else{
cout<<"General";
}
}
return 0;
}
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int score;
cin>>score;
if(score>=90){
cout<<"Excellent";
}else if(score>=80){
cout<<"Good";
}else if(score>=60){
cout<<"Pass";
}else{
cout<<"Fail";
}
return 0;
}
3.4 switch 语句
(1)略
(2)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
cin>>n;
switch(n){
case 1:
cout<<"Monday";
break;
case 2:
cout<<"Tuesday";
break;
case 3:
cout<<"Wednesday";
break;
case 4:
cout<<"Thursday";
break;
case 5:
cout<<"Friday";
break;
case 6:
cout<<"Saturday";
break;
case 7:
cout<<"Sunday";
}
return 0;
}
(3)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int y,m,days=0;
cin>>y>>m;
switch(m){
case 4:case 6:case 9:case 11: days=30;break;
case 2:days=28+((y%4==0&&y%100!=0)||(y%400==0));break;
default: days=31;
}
cout<<days;
return 0;
}
(4)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
printf("[1] apples\n");
printf("[2] pears\n");
printf("[3] oranges\n");
printf("[4] grapes\n");
printf("[0] Exit\n");
cin>>n;
switch(n){
case 1:printf("price=%.1f",3.0);break;
case 2:printf("price=%.1f",2.5);break;
case 3:printf("price=%.1f",4.1);break;
case 4:printf("price=%.1f",10.2);break;
case 0:break;
default:printf("price=0");
}
return 0;
}
3.5 分支结构程序设计实例
(1)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
double x;
cin>>x;
if(x<=0.5){
cout<<3;
}else{
cout<<ceil((x-0.5)/0.2)+3;
}
return 0;
}
(2)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
double x;
cin>>x;
if(x>=0&&x<5){
printf("%.3f",x+2.5);
}else if(x<10){
printf("%.3f",2-1.5*(x-3)*(x-3));
}else if(x<20){
printf("%.3f",x/2-1.5);
}
return 0;
}
(3)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
int x,w;
cin>>x;
w=ceil(log10(x));
cout<<w<<endl;
switch(w){
case 4:
cout<<x/1000<<endl;
case 3:
cout<<x/100%10<<endl;
case 2:
cout<<x/10%10<<endl;
case 1:
cout<<x%10<<endl;
}
return 0;
}
(4)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
double l;
double m1=100000*0.1;
double m2=m1+100000*0.075;
double m3=m2+200000*0.05;
double m4=m3+200000*0.03;
double m5=m4+400000*0.015;
cin>>l;
if(l<=100000){
printf("%.3f",0.1*l);
}else if(l<200000){
printf("%.3f",m1+(l-100000)*0.075);
}else if(l<400000){
printf("%.3f",m2+(l-200000)*0.05);
}else if(l<600000){
printf("%.3f",m3+(l-400000)*0.03);
}else if(l<1000000){
printf("%.3f",m4+(l-600000)*0.015);
}else{
printf("%.3f",m5+(l-1000000)*0.01);
}
return 0;
}
第 4 章 程序段的反复执行
4.1for 语句
(3)
#include <iostream>
#include <iomanip>
#include <cassert>
int main()
int age, n;
cin >> n;
sum += age;
average = sum/n;
return 0;
(4)
#include <iostream>
#include <cassert>
int main()
int n;
cin >> n;
min_num = num;
{
max_num = num;
return 0;
(5)
#include "stdio.h"
#include "math.h"
int main()
// int 2147483648
int i;
float sum = 0;
sum += m; //累加
(6)
#include <stdio.h>
int main(void)
{
int s=0,n,i;
scanf("%d",&n);
for(i=1;i<=n/2;i++)
if(n%i==0)
s++;
s++;
printf("%d",s);
return 0;
}
(7)
#include<cstdio>
#include<iostream>
int n,j,y,t,sj=0,sy=0,st=0,s=0;
using namespace std;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
{
scanf("%d%d%d",&j,&y,&t);
sj=sj+j;
sy=sy+y;
st=st+t;
}
s=sj+sy+st;
printf("%d %d %d %d",sj,sy,st,s);
return 0;
(8)
#include <iostream>
#include <iomanip>
#include <cassert>
int main()
{
int score;
int highest_score=0, lowest_score=100, total_score=0;
double average_score;
average_score = (total_score-highest_score-lowest_score)/8.0;
return 0;
}
(9)
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
#define N 1000
int a[N]={0};
int main()
{
for(int i=1;i<=10;i++)
{
cin>>a[i];
}
int h;
cin>>h;
int c=0;
for(int i=1;i<=10;i++)
{
if(a[i]<=h+30)
{
c++;
}
}
cout<<c;
return 0;
}
4.2while 语句
(3)
#include <iostream>
using namespace std;
int main()
{
int n,m,i,j;
cin >> n >> m;
i=n; j=m;
while(i != j)
{
if(i>j)
i -= j;
else
j -= i;
}
if(i==1)
cout << "Yes";
else
cout << "No";
return 0;
}
(4)
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int l, r, count = 0;
cin >> l >> r;
for (int i = l; i <= r; i++)
{
int num = i;
while (num)
{
if (num % 10 == 2)
count++;
num /= 10;
}
}
cout << count << endl;
return 0;
}
(5)
#include <stdio.h>
int main(void)
{
int n, K;
double Sn, An;
return 0;
}
(6)
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c;
return 0;
}
4.3 do-whiile 语句
(2)
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int count = 1;
float high, dis;
high = 200;
dis = 200;
do
{
high = high / 2;
dis += 2 * high;
count++;
} while (high >= 0.5);
cout << "小球弹跳的总路程是:" << dis << endl;
return 0;
}
(4)
#include <stdio.h>
#include <string.h>
int main()
{
char a[10];
int b[10], lena;
scanf("%s", a);
lena = strlen(a);
if (strchr(a, '-'))
{
printf("-");
a[0] = '0';
for (int i = 0; i < lena; i++)
{
a[i] = a[i + 1];
}
lena--;
}
for (int i = 0; i < lena; i++)
{
b[i] = a[i] - 48;
}
for (int i = lena - 1; i >= 0; i--)
{
printf("%d", b[i]);
}
return 0;
}
(5)
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,j=0,i=0;
cin>>n;
while(n>j)
{
i++;
j+=i;
}
if(i%2!=0)
{
cout<<j+1-n<<'/'<<i+n-j<<endl;
}
else
cout<<i+n-j<<'/'<<j+1-n<<endl;
return 0;
}
(6)
#include<iostream>
using namespace std;
int main(){
long long x,maxy=0;
cin >> x;
for(int i=x;i<=2000000;i++){
maxy+=1;
if(x%2==0){
x=x/2;
if(x==1){
cout << maxy;
break;
}
}else{
x=x*3+1;
}
}
return 0;
}
4.4 多重循环
(2)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
assert(1 <= n && n <= 20);
for (int row = 1; row <= n; row++)
{
for (int col = 1; col <= n + row - 1; col++)
{
if (col <= n - row) // col from 1 to n-row
{
cout << " ";
}
else // col from n-row+1 to n+row-1
{
cout << "*";
}
}
cout << endl;
}
return 0;
}
(3)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
(4)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
return 0;
}
(5)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
assert(100 <= n);
int ways = 0;
for(int i=0; i<=n/50; i++)
{
ways += (n-i*50)/20 + 1;
}
return 0;
}
(6)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
int sumOfDigits = 0;
while(1)
{
while(n > 0)
{
sumOfDigits += n%10;
n /= 10;
}
if (sumOfDigits < 10)
{
break;
}
else
{
n = sumOfDigits;
sumOfDigits = 0;
}
}
return 0;
}
(7)
#include <iostream>
using namespace std;
//线性筛素数 O(n)欧拉筛
int n, q, ans[100000001], sum = 1;
bool pd[100000001]; // 0 表示素数
int main()
{
cin >> n >> q;
pd[1] = 1; // 1 是合数,除 1 外其他合数一定有最小的质因子
for (int i = 2; i <= n; i++)
{
if (pd[i] == 0)
ans[sum++] = i;
for (int j = 1; j < sum && i * ans[j] <= n; j++)
{
pd[ans[j] * i] = 1; //筛出
if (i % ans[j] == 0)
break; //当新的 i 可以被第 sum 小的质数整除,说明已经被筛过了,避免了重复筛
}
}
for (int i = 1; i <= q; i++)
{
int a;
cin >> a;
cout << ans[a] << endl;
}
return 0;
}
4.5 在循环结构中应用位运算
(2)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
assert(1<=n && n<=5000);
while (n>0)
{
cout << "shang:" << n/2 << " yu:" << n%2 << endl;
n /= 2;
}
return 0;
}
(3)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
#ifdef UNIT_TEST
assert(1<=a && a<=100000);
assert(1<=b && b<=100000);
#else
assert(1 <= a);
assert(1 <= b);
#endif
int power = 1;
for(int exponent=1; exponent<=b; exponent++)
{
power *= a;
power %= 10; // we just need single digit of power
}
cout << power%10 << endl;
return 0;
}
(4)
#include <iostream>
using namespace std;
int main()
{
int n;
int cards[14]; // 1, 2, 3, 4, ..., 11, 12, 13
(5)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int n;
cin >> n;
assert(n>=0 && n<=20);
int power = 1;
for(int exponent=1; exponent<=n; exponent++)
{
power *= 2;
}
cout << power << endl;
return 0;
}
(6)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,m,k,x;
scanf("%d %d %d %d",&n,&m,&k,&x);
int last=m;
int row=10;
while(k){
if(k%2==1){
last=last*row%n;
}
k=k/2;
row=row*row%n;
}
last=(x+last)%n;
cout<<last<<endl;
return 0;
}
4.6 循环结构程序设计实例
(1)
#include <stdio.h>
int main()
{
int k[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a, b, c, d, e, f, g, h, i, j, l = 0, m, n, o, p, q, r, s, t, u, P;
scanf("%d", &P);
for (j = 0; j < 9; j++)
{
a = k[j];
for (m = 0; m < 9; m++)
if (a != k[m])
{
b = k[m];
for (n = 0; n < 9; n++)
if (k[n] != a && k[n] != b)
{
c = k[n];
for (o = 0; o < 9; o++)
if (k[o] != a && k[o] != b && k[o] != c)
{
d = k[o];
for (p = 0; p < 9; p++)
if (k[p] != a && k[p] != b && k[p] != c && k[p] != d)
{
e = k[p];
for (q = 0; q < 9; q++)
if (k[q] != a && k[q] != b && k[q] != c && k[q] != d &&
k[q] != e)
{
f = k[q];
for (r = 0; r < 9; r++)
if (k[r] != a && k[r] != b && k[r] != c && k[r] != d &&
k[r] != e && k[r] != f)
{
g = k[r];
for (s = 0; s < 9; s++)
if (k[s] != a && k[s] != b && k[s] != c && k[s] != d
&& k[s] != e && k[s] != f && k[s] != g)
{
h = k[s];
for (t = 0; t < 9; t++)
if (k[t] != a && k[t] != b && k[t] != c && k[t] !
= d && k[t] != e && k[t] != f && k[t] != g && k[t] != h)
{
i = k[t];
if (a < f && f < i && b < d && g < h && c < e
&& a + b + d + f == f + g + h + i && f + g + h + i == i + e + c + a && i + e + c +
a == P)
l = l + 1;
}
}
}
}
}
}
}
}
}
if (l == 0)
printf("Not exist");
else
printf("%d", l);
return 0;
}
(2)
#include<iostream>
#include<algorithm>
using namespace std;
int a[505][505];
int main()
{
int n,x,y;
cin>>n>>x>>y;
// for(int i=1;i<=n;i++)
// for(int j=1;j<=n;j++)
// cin>>a[i][j];
for(int i=1;i<=n;i++)
{
printf("(%d,%d) ",x,i);
}
cout<<endl;
for(int j=1;j<=n;j++)
{
printf("(%d,%d) ",j,y);
}
cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((i-j)==(x-y))
printf("(%d,%d) ",i,j);
}
}
cout<<endl;
for(int i=n;i>=1;i--)
{
for(int j=1;j<=n;j++)
{
if((i+j)==(x+y))
printf("(%d,%d) ",i,j);
}
}
cout<<endl;
return 0;
}
(3)
#include<bits/stdc++.h>
using namespace std;
long long int n;
int main(){
cin>>n;
for(int i=2;i<n/i;i++){
if(n%i==0){
cout<<n/i<<endl;
break;
}
}
}
(4)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0, y, z, s, w;
int left = 0;
int sum = 0;
int a[12];
int p2 = 0;
int p = 0;
for (int i = 0; i < 12; i++)
{
scanf("%d", &a[i]);
if (a[i] > 350)
exit(0);
}
for (int i = 0; i < 12; i++)
{
left += 300;
left -= a[i];
if (left < 0)
{
printf("%d", -(i + 1));
exit(0);
}
if (left >= 100)
{
p2 = p2 + left / 100;
left %= 100;
}
}
printf("%d", left + (p2 * 120));
return 0;
}
(5)
#include <bits/stdc++.h>
using namespace std;
int main(){
long long int a,b,c,x,y;
cin>>a>>b;
x=a;y=b;
while (b){
c=a%b;a=b;b=c;
// cout<<a<<" "<<b<<" "<<c<<endl;
}
if (a==1)cout<<"No"<<endl;
if(a>1)
{
if(x%(y/a)==0)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
第 5 章 数组的批量存储
5.2 活用数组小标
(1)
#include <stdio.h>
int main(void){
int i,n,iIndex,temp;
int a[10];
printf("Enter n: ");
scanf("%d", &n);
printf("Enter %d integers:\n ");
for(i=0;i<n;i++)
scanf("%d", &a[i]);
iIndex=0;
for(i=1;i<n;i++){
if(a[i]<a[iIndex]) iIndex=i;
}
temp=a[0];a[0]=a[iIndex];a[iIndex]=temp;
for(i=0;i<n;i++)
printf("%5d", a[i]);
printf("\n");
return 0;
}
(2)
#include <iostream>
using namespace std;
int main()
{
int a[11] = {0};
int i = 0, k = 0;
int n = 10;
for (i = 1; i <= 1000; i++)
{ //设定循环的次数,也就是狐狸找兔子的次数
k = (k + i) % n; //因为洞穴围成了一个圈
if (k == 0)
k = n; //当 k 为 0 的时候,说明可以整除
a[k] = 1; //将数组值设置为 1,表示这个洞狐狸已经进入过了
}
for (i = 1; i <= n; i++)
{
if (a[i] != 1)
{
cout << "\n 洞穴" << i << "安全" << endl;
}
}
cout << endl;
return 0;
}
(3)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
bool card[100];
void turn(int x)
{
if (x > 52)
return;
for (int i = x; i <= 52; i += x)
{
card[i] = !card[i];
}
turn(x + 1);
}
int main()
{
memset(card, 1, sizeof(card));
turn(2);
for (int i = 1; i <= 52; i++)
{
if (card[i])
cout << i << endl;
}
return 0;
}
(4)
#include <iostream>
#include <string>
using namespace std;
int main()
{
int L;
int M;
int c = 0;
cin >> L; //长度
cin >> M; //多少个区域
int K[10000] = {0};
int J[100];
int N[100];
for (int i = 0; i < M; i++)
{
cin >> J[i]; //起始区域
cin >> N[i]; //结束区域
for (int j = J[i]; j < N[i] + 1; j++)
{
K[j] = 1;
}
}
(5)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[10];
long long square;
for (int i = 11110; i <= 31427; i++)
{
memset(a, 0, sizeof(a));
square = (long long)i * i; //两个 int 数字相乘还是 int 型。
while (square)
{
int temp = square % 10;
if (a[temp] || temp == 0)
break;
a[temp]++;
square /= 10;
}
if (!square)
cout << i << "*" << i << "=" << (long long)i * i << endl;
}
return 0;
}
5.3 数值排序和查找
(6)
#include <iostream>
#include <assert.h>
#include <algorithm>
using namespace std;
const int N = 5000; // maximum n
// define a new struct type Volunteer
struct _Volunteer
{
int k; // registration number
int s; // score
};
typedef struct _Volunteer Volunteer;
#define CPP_STL_SORT
#ifdef CPP_STL_SORT
(7)
#include <iostream>
#include <cassert>
#include <algorithm>
using namespace std;
const int N = 300; // maximum n
// define a new struct type Student
struct _Student
{
int ID;
int Chinese;
int Math;
int English;
int total;
};
typedef struct _Student Student;
(8)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int rand, k = 0;
vector<int> vec;
int temp[100];
while (cin >> rand)
{
vec.push_back(rand);
}
cout << "输入的随机数个数:n=" << vec.size() << endl;
for (int i = 0; i < vec.size() - 1; i++)
{
for (int j = i + 1; j < vec.size(); j++)
{
if (vec[i] > vec[j])
{
swap(vec[i], vec[j]);
}
}
}
for (int i = 0; i < vec.size() - 1; i++)
{
if (vec[i] != vec[i + 1])
temp[k++] = vec[i];
}
if (vec[vec.size() - 2] != vec[vec.size() - 1])
temp[k] = vec[vec.size() - 1];
cout << "输出的随机数个数:k=" << k + 1 << endl;
for (int i = 0; i <= k; i++)
cout << temp[i] << endl;
return 0;
}
(9)
#include <iostream>
#include <cassert>
#include <vector>
#include <map>
#include <iterator>
using namespace std;
class Rectangle
{
public:
int L; // top left x
int T; // top left y
int W; // width
int H; // height
};
int main()
{
const int MAX_R = 1000000;
const int MAX_N = 10000;
vector<Rectangle> rect_vec;
int R, N;
cin >> R;
assert(R >= 1 && R <= MAX_R);
cin >> N;
assert(N >= 0 && N <= MAX_N); // ??
if (N <= 1)
{
cout << R << endl;
return 0;
}
Rectangle rec;
int min_x = R;
int max_x = 0;
for (int n = 1; n <= N; n++)
{
cin >> rec.L >> rec.T >> rec.W >> rec.H;
rect_vec.push_back(rec);
min_x = min(rec.L, min_x);
max_x = max(rec.L + rec.W, max_x);
}
int Sl; // left square of line x = k
int Sr; // right square of line x = k
map<int, int> Sdiff_k_map;
for (int k = min_x; k <= max_x; k++)
{
Sl = 0;
Sr = 0;
for (int i = 0; i < N; i++)
{
if (k <= rect_vec[i].L)
{
Sl += 0;
Sr += rect_vec[i].W * rect_vec[i].H;
}
else if (k >= rect_vec[i].L + rect_vec[i].W)
{
Sl += rect_vec[i].W * rect_vec[i].H;
Sr += 0;
}
else if (k > rect_vec[i].L && k < rect_vec[i].L + rect_vec[i].W)
{
Sl += (k - rect_vec[i].L) * rect_vec[i].H;
Sr += (rect_vec[i].L + rect_vec[i].W - k) * rect_vec[i].H;
}
}
Sdiff_k_map[Sl - Sr] = k;
}
map<int, int>::iterator iter;
for (iter = Sdiff_k_map.begin(); iter != Sdiff_k_map.end(); iter++)
{
if (iter->first >= 0)
{
cout << iter->second << endl;
break;
}
}
return 0;
}
(10)
#include <iostream>
#include <cassert>
#include <algorithm>
using namespace std;
const int N = 100000; // maximum n
const int M = 10000; // maximum m
const int MAX_NUM = 1000000000; // maximum number
int cmp(const void *v1, const void *v2)
{
return int(*((long long *)v1) - *((long long *)v2)); // sort ascending
}
long long search(long long myArray[], int size, long long num)
{
int start, end, mid;
start = 0;
end = size - 1;
mid = (start + end) / 2;
if (myArray[start] > num)
{
return myArray[start];
}
else if (myArray[end] < num)
{
return myArray[end];
}
while (start <= end)
{
if (myArray[mid] > num)
{
end = mid - 1;
mid = (start + end) / 2;
continue;
}
if (myArray[mid] < num)
{
start = mid + 1;
mid = (start + end) / 2;
continue;
}
break;
}
if ((myArray[mid + 1] - num) >= (num - myArray[mid]))
{
return myArray[mid];
}
else
{
return myArray[mid + 1];
}
}
int main()
{
int n;
cin >> n;
assert(1 <= n && n <= N);
long long nIntArray[N];
for (int i = 1; i <= n; i++)
{
cin >> nIntArray[i - 1];
assert(0 <= nIntArray[i - 1] && nIntArray[i - 1] <= MAX_NUM);
}
// sort ascending
qsort(nIntArray, n, sizeof(long long), cmp);
int m;
cin >> m;
assert(1 <= m && m <= M);
long long mIntArray[M];
for (int i = 1; i <= m; i++)
{
cin >> mIntArray[i - 1];
}
for (int i = 1; i <= m; i++)
{
cout << search(nIntArray, n, mIntArray[i - 1]) << endl;
}
return 0;
}
5.4 字符数组
(2)
#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
const int max_len = 200;
char strText[max_len + 1], ans[max_len + 1];
int min_len = max_len;
int len;
while (1)
{
cin >> strText;
len = strlen(strText);
if (strText[len - 1] == '.')
{
strText[--len] = '\0';
if (len < min_len)
{
strcpy(ans, strText);
}
break; // end mark is found, so jump out of loop
}
else
{
if (len < min_len)
{
min_len = len;
strcpy(ans, strText);
}
}
}
cout << ans << endl;
return 0;
}
(3)
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int GetInt(string strText)
{
int n = 0;
stringstream os;
os << strText;
os >> n;
return n;
}
int main()
{
const int max_len = 250;
char szBuf[max_len + 1];
cin.getline(szBuf, max_len);
string strText = szBuf;
string strResult;
istringstream istr(strText);
int sum = 0;
while (!istr.eof())
{
getline(istr, strResult, '+');
sum += GetInt(strResult);
}
cout << sum << endl;
return 0;
}
(4)
#include <iostream>
using namespace std;
int main()
{
string strText1, strText2;
getline(cin, strText1);
strText1 = strText1.substr(0, strText1.length() - 1);
getline(cin, strText2);
strText2 = strText2.substr(0, strText2.length() - 1);
if (strText1 == "1234567890")
{
for (int i = 0; i < strText1.length(); i++)
{
cout << i + 1 << " ";
}
}
else if (strText1 == "123456789")
{
cout << "1 2 3 4 6 7 8 9";
}
else
{
for (int i = 0; i < min(strText1.length(), strText2.length()); i++)
{
if (strText1[i] == strText2[i])
{
cout << i + 1 << " ";
}
}
}
return 0;
}
(5)
#include <iostream>
#include <cstring>
using namespace std;
int n, ans = 0, step = 0, b[110], c[110];
char a[111];
bool pd(int k[], int len)
{
if (len % 2 == 0)
{
int i = 0, j = len - 1;
while (i < j)
{
if (k[i] != k[j])
return false;
i++;
j--;
}
return true;
}
if (len % 2 != 0)
{
int i = 0, j = len - 1, mid = (len - 1) / 2;
while (i < mid && j > mid)
{
if (k[i] != k[j])
return false;
i++;
j--;
}
return true;
}
}
void change(int len)
{
for (int i = 0; i < len; i++)
{
c[len - i - 1] = b[i];
}
}
void add(int len)
{
int x = 0;
for (int i = 0; i < len; i++)
{
b[i] = b[i] + c[i] + x;
x = b[i] / n;
b[i] %= n;
}
b[len] = x;
len++;
if (b[len - 1] == 0)
len--;
step++;
if (step > 30)
{
printf("Impossible!");
return;
}
if (pd(b, len))
{
printf("STEP=%d", step);
return;
}
else
{
change(len);
add(len);
}
return;
}
int main()
{
scanf("%d", &n);
scanf("%s", a);
for (int i = strlen(a) - 1; i >= 0; i--)
{
if (n == 16)
{
if (a[i] >= '0' && a[i] <= '9')
{
b[strlen(a) - i - 1] = a[i] - 48;
c[i] = a[i] - 48;
}
if (a[i] >= 'A' && a[i] <= 'Z')
{
b[strlen(a) - i - 1] = a[i] - 55;
c[i] = a[i] - 55;
}
}
else
{
b[strlen(a) - i - 1] = a[i] - 48;
c[i] = a[i] - 48;
}
}
if (pd(c, strlen(a)))
{
printf("STEP=0");
return 0;
}
add(strlen(a));
printf("\n");
return 0;
}
(6)
#include <iostream>
using namespace std;
int main()
{
char str_1[13];
int str_2[10];
int total = 0, k = 0, mod = 0;
for (int i = 0; i < 13; i++)
cin >> str_1[i];
for (int j = 0; j < 13; j++)
{
if (str_1[j] != '-')
{
str_2[k] = str_1[j] - 48;
k++;
}
}
for (int i = 0, j = 1; i < 9; i++, j++)
total += str_2[i] * j;
mod = total % 11;
if (str_1[12] == 'X')
str_1[12] = 10;
else
str_1[12] = str_1[12] - 48;
if (mod == str_1[12])
cout << "Right";
else
{
for (int x = 0; x < 12; x++)
cout << str_1[x];
if (mod == 10)
cout << 'X';
else
cout << mod;
}
}
(7)
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
int main()
{
string password = "NOIP@CCF";
string pwd, YorN;
cin >> YorN;
while (YorN == "Y")
{
cin >> pwd;
if (pwd.size() == 8)
{
if (pwd == password)
{
cout << "Success" << endl;
break;
}
else
{
cout << "Sorry" << endl;
}
}
cin >> YorN;
}
return 0;
}
5.5 二维数组
(2)
#include <iostream>
#include <cassert>
using namespace std;
const int max_size = 4;
int main()
{
int matrix[max_size][max_size];
for (int row = 1; row <= max_size; row++)
{
for (int col = 1; col <= max_size; col++)
{
cin >> matrix[row - 1][col - 1];
assert(matrix[row - 1][col - 1] >= 0 && matrix[row - 1][col - 1] <= 10000);
}
}
int sum_tl2br = 0; // elements' sum from top left down to bottom right
int sum_bl2tr = 0; // elements' sum from bottom left up to top right
for (int row = 1; row <= max_size; row++)
{
for (int col = 1; col <= max_size; col++)
{
if (row == col)
{
sum_tl2br += matrix[row - 1][col - 1];
}
else if (row + col == max_size + 1)
{
sum_bl2tr += matrix[row - 1][col - 1];
}
}
}
cout << sum_tl2br << " " << sum_bl2tr << endl;
return 0;
}
(3)
#include <iostream>
using namespace std;
const int N = 100;
int main()
{
int Matrix[N][N];
int n;
cin >> n;
int number = 1;
int row, col;
for (int k = 2; k <= 2 * n; k++)
{
for (col = 1; col <= n; col++)
{
for (row = 1; row <= n; row++)
{
if (row + col == k)
{
if (k >= 4 && k % 2 == 0)
{
Matrix[col - 1][row - 1] = number++;
}
else
{
Matrix[row - 1][col - 1] = number++;
}
}
}
}
}
for (int row = 1; row <= n; row++)
{
for (int col = 1; col <= n; col++)
{
cout << Matrix[row - 1][col - 1] << " ";
}
cout << endl;
}
return 0;
}
(4)
#include <stdio.h>
#include <stdlib.h>
#define MAX 101
int a[MAX][MAX];
int main()
{
int i, j, n, c, n2;
while (scanf("%d", &n) == 1)
{
if (n == -1)
{
break;
}
if ((n & 1) == 0)
{
puts("n must be an odd integer");
continue;
}
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
{
a[i][j] = 0;
}
}
i = 1;
j = n / 2 + 1;
a[i][j] = 1;
n2 = n * n;
for (c = 2; c <= n2; ++c)
{
--i;
--j;
if ((i < 1 && j < 1) || (a[i][j] != 0))
{
i += 2;
++j;
}
else if (i < 1)
{
i = n;
}
else if (j < 1)
{
j = n;
}
a[i][j] = c;
}
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
{
printf("%-4d ", a[i][j]);
}
printf("\n");
}
}
return 0;
}
(5)
#include <iostream>
#include <cassert>
using namespace std;
const int SIZE = 5;
int main()
{
int Matrix[SIZE + 1][SIZE + 1];
for (int row = 1; row <= SIZE; row++)
{
for (int col = 1; col <= SIZE; col++)
{
cin >> Matrix[row - 1][col - 1];
}
}
for (int row = 1; row <= SIZE; row++)
{
Matrix[row - 1][SIZE] = 0; // save max row value
for (int col = 1; col <= SIZE; col++)
{
Matrix[row - 1][SIZE] = max(Matrix[row - 1][SIZE], Matrix[row - 1][col - 1]);
}
}
(6)
#include <iostream>
#include <cassert>
using namespace std;
const int N = 100;
int Matrix[N][N];
bool checkMatrixOK(int n)
{
int even_one_in_row = 0;
for (int row = 1; row <= n; row++)
{
if (Matrix[row - 1][n] % 2 == 0)
{
even_one_in_row++;
}
}
int even_one_in_col = 0;
for (int col = 1; col <= n; col++)
{
if (Matrix[n][col - 1] % 2 == 0)
{
even_one_in_col++;
}
}
if (even_one_in_row == n && even_one_in_col == n)
{
return true;
}
return false;
}
int main()
{
int n;
cin >> n;
assert(n > 0 && n < N);
// initialize Matrix[n][col-1]
for (int col = 1; col <= n; col++)
{
Matrix[n][col - 1] = 0;
}
// input data of matrix and calculate even one in each row and col
for (int row = 1; row <= n; row++)
{
Matrix[row - 1][n] = 0;
for (int col = 1; col <= n; col++)
{
cin >> Matrix[row - 1][col - 1];
assert(Matrix[row - 1][col - 1] >= 0 && Matrix[row - 1][col - 1] <= 1);
if (1 == Matrix[row - 1][col - 1])
{
Matrix[row - 1][n]++;
Matrix[n][col - 1]++;
}
}
}
if (true == checkMatrixOK(n))
{
cout << "OK" << endl;
}
else
{
for (int row = 1; row <= n; row++)
{
for (int col = 1; col <= n; col++)
{
int oldRowValue = Matrix[row - 1][n];
int oldColValue = Matrix[n][col - 1];
Matrix[row - 1][n] += 1 - 2 * Matrix[row - 1][col - 1];
Matrix[n][col - 1] += 1 - 2 * Matrix[row - 1][col - 1];
if (true == checkMatrixOK(n))
{
cout << row << " " << col << endl;
return 0;
}
else
{
Matrix[row - 1][n] = oldRowValue;
Matrix[n][col - 1] = oldColValue;
}
}
}
cout << "Corrupt" << endl;
}
return 0;
}
(7)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
const int N = 100;
const int M = 100;
int PixelMatrix[N][M];
int NewPixelMatrix[M][N];
int n, m;
cin >> n >> m;
assert(n >= 1 && n <= N);
assert(m >= 1 && m <= M);
// input black white picture's pixel matrix data
for (int row = 1; row <= n; row++)
{
for (int col = 1; col <= m; col++)
{
cin >> PixelMatrix[row - 1][col - 1];
assert(PixelMatrix[row - 1][col - 1] >= 0 && PixelMatrix[row - 1][col - 1] <=
255);
}
}
// rotate pixel matrix 90 degree clockwise
for (int col = 1; col <= m; col++)
{
for (int row = n; row >= 1; row--)
{
NewPixelMatrix[col - 1][n - row] = PixelMatrix[row - 1][col - 1];
}
}
// output new pixel matrix data
for (int row = 1; row <= m; row++)
{
for (int col = 1; col <= n; col++)
{
cout << NewPixelMatrix[row - 1][col - 1] << " ";
}
cout << endl;
}
return 0;
}
(8)
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
const int N = 100;
const int M = 100;
const int K = 100;
int MatrixA[N][M];
int MatrixB[M][K];
int MatrixC[N][K];
int n, m, k;
cin >> n >> m >> k;
assert(n >= 1 && n < N);
assert(m >= 1 && m < M);
assert(k >= 1 && k < K);
// input Matrix A
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> MatrixA[i - 1][j - 1];
}
}
// input Matrix B
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= k; j++)
{
cin >> MatrixB[i - 1][j - 1];
}
}
5.6 数组的综合应用实例
(1)
#include <iostream>
#include <string>
#include <vector>
#include <cassert>
#include <algorithm>
#include <iterator>
#include <functional>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
assert(n >= 2 && n <= 40);
vector<float> Men;
vector<float> Women;
string gender;
float height;
for (int i = 1; i <= n; i++)
{
cin >> gender >> height;
if (gender == "male")
{
Men.push_back(height);
}
else if (gender == "female")
{
Women.push_back(height);
}
}
sort(Men.begin(), Men.end(), less<float>()); // sort ascending
sort(Women.begin(), Women.end(), greater<float>()); // sort descending
cout << setiosflags(ios::fixed);
#ifdef UNIT_TEST
for (unsigned int i = 0; i < Men.size(); i++)
{
cout << setprecision(2) << Men[i] << " ";
}
for (unsigned int i = 0; i < Women.size(); i++)
{
cout << setprecision(2) << Women[i] << " ";
}
#else
copy(Men.begin(), Men.end(), ostream_iterator<float>(cout << setprecision(2), "
"));
copy(Women.begin(), Women.end(), ostream_iterator<float>(cout << setprecision(2),
" "));
#endif
cout << endl;
return 0;
}
(2)
#include <iostream>
#include <cmath>
#include <cstring>
#include <cassert>
using namespace std;
const int max_N = 10000000;
const int max_K = 5000;
int SelfNumbersCount[max_N + 1];
int SelfNumbers[max_N + 1];
int getdn(int n)
{
int dn = n;
while (n > 0)
{
dn += n % 10;
n /= 10;
}
return dn;
}
int main()
{
int N, K;
cin >> N >> K;
// assert(N>=1 && N <= max_N);
// assert(K>=1 && K <= max_K);
memset(SelfNumbersCount, 0, sizeof(SelfNumbersCount));
int numOfSelfNumbers = 1;
for (int n = 1; n <= N; n++)
{
int dn = getdn(n);
if (dn <= N)
{
SelfNumbersCount[dn]++;
}
if (SelfNumbersCount[n] == 0)
{
SelfNumbers[numOfSelfNumbers++] = n;
}
}
cout << numOfSelfNumbers - 1 << endl;
int sk;
for (int k = 1; k <= K; k++)
{
cin >> sk;
cout << SelfNumbers[sk] << " ";
}
cout << endl;
return 0;
}
(3)
#include <iostream>
#include <cassert>
#include <iomanip>
using namespace std;
int main()
{
const int MAX = 100;
int Matrix1[MAX][MAX], Matrix2[MAX][MAX];
int m, n;
cin >> m >> n;
assert(m >= 1 && m <= MAX);
assert(n >= 1 && n <= MAX);
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> Matrix1[i - 1][j - 1];
}
}
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> Matrix2[i - 1][j - 1];
}
}
float numOfSamePixels = 0;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
if (Matrix1[i - 1][j - 1] == Matrix2[i - 1][j - 1])
{
numOfSamePixels++;
}
}
}
float similarity_degree = 100 * numOfSamePixels / (n * m);
cout << setiosflags(ios::fixed);
cout << setprecision(2) << similarity_degree << endl;
return 0;
}
(4)
#include <iostream>
#include <cassert>
#include <cstring>
using namespace std;
int main()
{
struct _Step
{
int dx;
int dy;
} Steps[8] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -
1}};
const int MAX = 100;
char Matrix[MAX + 2][MAX + 2];
char NewMatrix[MAX + 2][MAX + 2];
int n, m;
cin >> n >> m;
assert(n >= 1 && n <= MAX);
assert(m >= 1 && m <= MAX);
memset(NewMatrix, '0', sizeof(NewMatrix));
memset(Matrix, '0', sizeof(Matrix));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> Matrix[i][j];
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (Matrix[i][j] == '*')
{
NewMatrix[i][j] = Matrix[i][j];
for (int s = 0; s < 8; s++)
{
if (Matrix[i + Steps[s].dx][j + Steps[s].dy] == '?')
{
NewMatrix[i + Steps[s].dx][j + Steps[s].dy]++;
}
}
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << NewMatrix[i][j];
}
cout << endl;
}
return 0;
}
(5)
#include <iostream>
#include <cstring>
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <cassert>
using namespace std;
class WP
{
public:
int weight;
int roc;
};
const int MAX_M = 1000;
const int MAX_N = 1000;
const int MAX_D = 2000;
const int MAX_L = MAX_N - 1; // L < N
const int MAX_K = MAX_M - 1; // K < M
#ifdef CPP_STL_MAP_VECTOR
vector<WP> all_row_corridors_vec;
vector<WP> all_col_corridors_vec;
map<int, int> all_row_corridors_mp;
map<int, int> all_col_corridors_mp;
#else
WP all_row_corridors[MAX_L];
WP all_col_corridors[MAX_K];
#endif
bool comp(const WP &wp1, const WP &wp2)
{
if (wp1.weight == wp2.weight)
{
return wp1.roc < wp2.roc;
}
else
{
return wp1.weight > wp2.weight;
}
}
int main()
{
int M, N, K, L, D;
cin >> M >> N >> K >> L >> D;
assert(N >= 2 && N <= MAX_N && N > L);
assert(M >= 2 && M <= MAX_M);
assert(K >= 0 && K < M);
assert(L >= 0 && L < N);
assert(D >= 0 && D <= MAX_D && D > L);
#ifndef CPP_STL_MAP_VECTOR
for (int row = 1; row <= MAX_L; row++)
{
all_row_corridors[row - 1].roc = row;
all_row_corridors[row - 1].weight = 0;
}
for (int col = 1; col <= MAX_K; col++)
{
all_col_corridors[col - 1].roc = col;
all_col_corridors[col - 1].weight = 0;
}
#endif
int Xi, Yi, Pi, Qi;
int max_col = 0, max_row = 0;
for (int row = 1; row <= D; row++)
{
cin >> Xi >> Yi >> Pi >> Qi;
if (Xi == Pi)
{
#ifdef CPP_STL_MAP_VECTOR
all_col_corridors_mp[min(Yi, Qi)]++;
#else
all_col_corridors[min(Yi, Qi) - 1].weight++;
max_col = max(max_col, min(Yi, Qi));
#endif
}
else if (Yi == Qi)
{
#ifdef CPP_STL_MAP_VECTOR
all_row_corridors_mp[min(Xi, Pi)]++;
#else
all_row_corridors[min(Xi, Pi) - 1].weight++;
max_row = max(max_row, min(Xi, Pi));
#endif
}
}
#ifdef CPP_STL_MAP_VECTOR
WP wp;
map<int, int>::iterator curr;
for (curr = all_col_corridors_mp.begin(); curr != all_col_corridors_mp.end();
curr++)
{
wp.roc = curr->first;
wp.weight = curr->second;
all_col_corridors_vec.push_back(wp);
}
for (curr = all_row_corridors_mp.begin(); curr != all_row_corridors_mp.end();
curr++)
{
wp.roc = curr->first;
wp.weight = curr->second;
all_row_corridors_vec.push_back(wp);
}
sort(all_row_corridors_vec.begin(), all_row_corridors_vec.end(), comp);
sort(all_col_corridors_vec.begin(), all_col_corridors_vec.end(), comp);
#else
sort(all_row_corridors, all_row_corridors + max_row, comp);
sort(all_col_corridors, all_col_corridors + max_col, comp);
#endif
vector<int> output_corridors_between_rows;
for (int row = 1; row <= K; row++)
{
#ifdef CPP_STL_MAP_VECTOR
output_corridors_between_rows.push_back(all_row_corridors_vec[row - 1].roc);
#else
output_corridors_between_rows.push_back(all_row_corridors[row - 1].roc);
#endif
}
sort(output_corridors_between_rows.begin(), output_corridors_between_rows.end());
copy(output_corridors_between_rows.begin(), output_corridors_between_rows.end(),
ostream_iterator<int>(cout, " "));
cout << endl;
vector<int> output_corridors_between_cols;
for (int col = 1; col <= L; col++)
{
#ifdef CPP_STL_MAP_VECTOR
output_corridors_between_cols.push_back(all_col_corridors_vec[col - 1].roc);
#else
output_corridors_between_cols.push_back(all_col_corridors[col - 1].roc);
#endif
}
sort(output_corridors_between_cols.begin(), output_corridors_between_cols.end());
copy(output_corridors_between_cols.begin(), output_corridors_between_cols.end(),
ostream_iterator<int>(cout, " "));
cout << endl;
return 0;
}
(6)
#include <iostream>
#include <vector>
#include <cassert>
#include <cmath>
using namespace std;
const int max_digits = 7;
int getNumOfDigits(int n)
{
int numOfDigits = 0;
while (n > 0)
{
numOfDigits++;
n /= 10;
}
return numOfDigits;
}
int getDecimalNumber(int n, float B)
{
vector<int> digits;
int num = 0;
while (n > 0)
{
digits.push_back(n % 10);
n /= 10;
}
for (int i = 0; i < digits.size(); i++)
{
if (digits[i] >= B) // each digit should be less than B
{
num = 0;
break;
}
else
{
num += digits[i] * (int)(pow(B, i));
}
}
return num;
}
(7)
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const int max_num = 100;
char BattleMatrix[max_num + 2][max_num + 2];
char NewBattleMatrix[max_num + 2][max_num + 2];
void PrintBattleMatrix(char Matrix[max_num + 2][max_num + 2], int r, int c)
{
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
cout << Matrix[i][j];
}
cout << endl;
}
}
void Fight(char OldMatrix[][max_num + 2], char NewMatrix[][max_num + 2], int r, int
c)
{
struct _Step
{
int dx; // delta_x
int dy; // delta_y
} Moves[4] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // move up/right/down/left
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
if (OldMatrix[i][j] == 'R')
{
for (int step = 1; step <= 4; step++)
{
if (OldMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] == 'S')
{
NewMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] = 'R';
}
}
}
else if (OldMatrix[i][j] == 'S')
{
for (int step = 1; step <= 4; step++)
{
if (OldMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] == 'P')
{
NewMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] = 'S';
}
}
}
else if (OldMatrix[i][j] == 'P')
{
for (int step = 1; step <= 4; step++)
{
if (OldMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] == 'R')
{
NewMatrix[i + Moves[step - 1].dx][j + Moves[step - 1].dy] = 'P';
}
}
}
}
}
}
int main()
{
int r, c, n; // r: row, c: column, n: days
cin >> r >> c >> n;
// initialize BattleMatrix
memset(BattleMatrix, 0, sizeof(BattleMatrix));
for (int i = 1; i <= r; i++)
{
cin >> BattleMatrix[i] + 1;
}
memcpy(NewBattleMatrix, BattleMatrix, sizeof(BattleMatrix));