练习题题解:
6-1
void proceed(int *a, int *b, int size, void (*fp)(int x, int y)){
for(int i=0; i<size; i++) (*fp)(*(a+i),*(b+i));
}
6-2
void tian(int (*p)[n]) {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++){
if(i+j==n-1)
p[i][j]=1;
else if(i+j>n-1)
p[i][j]=2;
else
p[i][j]=3;
}
}
}
6-3
int getTreasure(int *pBucket, int x, int y)
{
if(x%2==0){
if(y%2==0){
*pBucket+=5;
return 1;
}
else{
*pBucket+=0;
return 0;
}
}
else{
if(y%2==0){
*pBucket+=0;
return 0;
}
else{
*pBucket+=*pBucket/3;
return 1;
}
}
}
6-4
int gys(int m,int n){
return n? gys(n,m%n):m;
}
7-1
#include <stdio.h>
int main(){
printf("2018\nwo3 men2 yao4 ying2 !");
return 0;
}
7-2
#include <stdio.h>
int max(int a,int b){
return a>b?a:b;
}
int main(){
int a[3][5];
for(int i=0;i<3;i++){
int ans=0;
int m=-(1<<29);
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
ans+=a[i][j];
m=max(a[i][j],m);
}
a[i][3]=m;
a[i][4]=ans;
}
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
printf("%4d",a[i][j]);
}
if(i!=2)
printf("\n");
}
return 0;
}
7-3
#include<stdio.h>
#include<stdlib.h>
int sum=0;
void wz(int(*p)[20],int m,int n);
int main(){
int m,n;
scanf("%d%d",&m,&n);
scanf("\n");
char a;
int b[20][20];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
a=getchar();
if(a=='#')
b[i][j]=2;
else if(a=='0'){
b[i][j]=0;
}
scanf("\n");
}
}
int num;
scanf("%d",&num);
int p[400];
int x,y;
for(int i=0;i<num;i++){
sum=0;
scanf("%d%d",&x,&y);
if(b[x][y]!=0){
b[x][y]=0;
sum++;
}
if(((x-1)>=0)&&((x-1)<m))
wz(b,x-1,y);
if(((y-1)<n)&&((y-1)>=0))
wz(b,x,y-1);
if(((x+1)<m)&&((x+1)>=0))
wz(b,x+1,y);
if(((y+1)<n)&&((y+1)>=0))
wz(b,x,y+1);
p[i]=sum;
}
for(int i=0;i<num;i++){
printf("%d\n",p[i]);
}
return 0;
}
void wz(int(*p)[20],int m,int n)
{
if(p[m][n]==2){
p[m][n]=1;
}
else if(p[m][n]==1){
sum++;
p[m][n]=0;
}
}
7-4(这是某19级同学写的代码)
#include<stdio.h>
char a[256];
int main()
{
int n,i,s;
while (scanf("%d",&n)!=EOF) {
int A=0,G=0,C=0,T=0;
getchar();
gets(a);
if (n%4!=0) {printf("-1\n");continue;}
s=n/4;
for (i=0;i<n;i++) {
switch(a[i]){
case 'A':A++;break;
case 'G':G++;break;
case 'C':C++;break;
case 'T':T++;break;
}
}
if (A>s||G>s||C>s||T>s) {printf("-1\n");continue;}
A=s-A;G=s-G;C=s-C;T=s-T;
for (i=0;i<n;i++) {
if (a[i]!='?') printf("%c",a[i]);
else {
if (A>0) {printf("A");A--;}
else if (C>0) {printf("C");C--;}
else if (G>0) {printf("G");G--;}
else if (T>0) {printf("T");T--;}
}
}
printf("\n");
}
return 0;
}
7-5
#include <stdio.h>
#include <string.h>
char a[200];
typedef enum bool{false,true} bool;
bool ong(int p){
if(a[p-1]=='g'&&p-2>=0&&a[p-2]=='n'&&p-3>=0&&a[p-3]=='o')
return true;
return false;
}
int main(){
int t;
scanf("%d\n",&t);
while (t--){
gets(a);
int f=0;
int d=strchr(a,',')-a;
int j=strchr(a,'.')-a;
if(ong(d)==false||ong(j)==false){
printf("Skipped\n");
continue;
}
int n;
int sum=0;
for(int i=strlen(a)-1;i>=0;i--){
if(a[i]==' ')
sum++;
if(sum==3){
n=i;
break;
}
}
for(int i=0;i<=n;i++)
printf("%c",a[i]);
printf("qiao ben zhong.\n");
}
return 0;
}
7-6
#include <stdio.h>
#include <string.h>
char a[200];
char b[200][200];
int k[200];
typedef enum bool{false,true} bool;
int change(int p){
int ans=0;
while(1){
if(p/10==0)
break;
while(p){
ans+=p%10;
p/=10;
}
p=ans;
ans=0;
}
return p;
}
int main(){
int t;
scanf("%d\n",&t);
while (t--){
memset(b,0, sizeof(b));
gets(a);
for(int i=0;i<strlen(a);i++){
b[i/6][i%6]=a[i];
}
int n=strlen(a)/6;
for(int i=0;i<6;i++){
k[i]=0;
for(int j=0;j<=n;j++)
k[i]+=b[j][i];
}
for(int i=0;i<6;i++)
k[i]=change(k[i]);
for(int i=0;i<6;i++)
printf("%d",k[i]);
printf("\n");
}
return 0;
}
限时训练题解:
7-1
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int z;
int i=0;
int s=0;
for(int x=0;x<=300;x++){
for(int y=0;y<=500;y++){
z=n-x-y;
if(z>=0&&(15*x+9*y+z==n*3)){
i++;
s+=x;
}
}
}
if(!i)
s=-1;
printf("%d %d",i,s);
return 0;
}
7-2
#include<stdio.h>
#include<math.h>
int isss(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)
return 0;
}
return 1;
}
int main(){
int n;
scanf("%d",&n);
int f=0;
if(n==0||n==1){
printf("3 5");
goto a;
}
if(n<0){
printf("3 5");
goto a;
}
for(int i=n+1;;i++){
if(isss(i)){
if(isss(i+2)){
printf("%d %d",i,i+2);
f=1;
}
}
if(f)
break;
}
a:
return 0;
}
7-3
#include<stdio.h>
#include<math.h>
int main()
{
int L,N;
scanf("%d%d",&L,&N);
double M=pow(26,L)-N;
int m=(int)M;
char ch[6];
int i=0;
while(L--)
{
ch[i++]='a'+m%26;
m/=26;
}
for(int j=i-1;j>=0;j--)
printf("%c",ch[j]);
return 0;
}
7-4
#include<stdio.h>
int main(){
int happy=0;
int unhappy=0;
int sad=0;
int money=0;
char a;
while((a=getchar())!='$'){
if(happy){
happy--;
if(sad)
sad--;
if(unhappy)
unhappy--;
}
else{
if(unhappy&&sad){
putchar('-');
unhappy--;
sad--;
continue;
}
else if(unhappy&&(!sad)){
putchar('-');
unhappy--;
continue;
}
else if((!unhappy)&&sad){
putchar('-');
sad--;
continue;
}
}
if(a=='X'){
putchar('U');
unhappy=1;
}
else if(a=='T'){
putchar('D');
money+=7;
sad=2;
}
else{
putchar('!');
happy=2;
money-=3;
}
}
printf("\n%d\n",money);
return 0;
}