Description
  有两条装配线,编号分别为1和2。每一条装配线上有个n装配点,将第i条线上的第个j装配点记为Si,j,设在装配点Si,j的装配时间为Ai,j。假设要装配一辆汽车,将汽车底盘从进厂点送入第i号装配线,需要时间Ei。在装配点Si,j装配后,如果汽车传送到同一号装配线的装配点Si,j+1进行装配,则传送不需要时间。如果汽车完成装配点Si,j的工作后传送到另一号装配线进行下一步的工作,则需要传送时间Ti,j。汽车在装配点Si,n装配后,将汽车成品从装配线上退下来,需要花费时间Xi。装配线调度问题是如何确定每一个装配点的装配需要在哪号线上进行,使得当汽车成品出来时,花费的总时间最少。
Input
输入的第一行包含一个正整数n(1<=n<=1000)
第二行包含四个正整数,分别是传入装配线所用时间E1,E2和退出装配线所用时间X1,X2。(0<E1,E2,X1,X2<=1000)
接下来的两行每行有n个正整数,分别描述装配时间A1,j和A2,j(0<Ai,j<=1000)(1<=j<=n)。
接下来的两行每行有n –
1个正整数,分别描述传送时间T1,j和T2,j(0<=Ti,j<=150)(1<=j<=n-1)。
Output
输出一个正整数表示一辆汽车最快需要多少时间出厂。
Sample Input
4
10 20 40 30
50 100 1000 50
200 200 200 65
10 10 10
20 20 20
Sample Output
465

【USACO】DP动态规划小测(一),usacodp动态规划

{20160927 19:30~21:30}

总分400分,我113.33,稳稳地垫底了……(十分呼应我上面的博客名,hhh~)过了这么多天我才打完所有代码,废话我也就不多说了。不过,虽然时间花费的多,但我觉得我的PG也是“博采众长”了。


T1 接住苹果(bcatch)

澳门新葡萄京官网注册 1

题意:有2颗苹果树,有K次移动机会,问最多能接到的苹果数。

解法:可以用f[i][j][2]或f[i][j]和g[i][j]来实现,表示掉了i个苹果,移动j次的最大值。也可以利用j的奇偶直接判断当前在的树,进而进行+1或0。

澳门新葡萄京官网注册 2 1
#include<cstdio> 2 #include<cstdlib> 3
#include<cstring> 4 #include<iostream> 5 using namespace
std; 6 7 const int N=1010,K=35; 8 int f[N][K],g[N][K],a[N]; 9
10 int mmax(int x,int y) 11 { return x>y?x:y; } 12 13 int main() 14 {
15 //freopen(“bcatch.in”,”r”,stdin); 16
//freopen(“bcatch.out”,”w”,stdout); 17 int n,k; 18 scanf(“%d%d”,&n,&k);
19 for (int i=1;i<=n;i++) scanf(“%d”,&a[i]),a[i]–; 20 int
x,y,ans=0; 21 memset(f,0,sizeof(f)); 22 memset(g,0,sizeof(g)); 23 for
(int i=1;i<=n;i++) 24 for (int j=0;j<=k;j++) 25 { 26
x=1-a[i],y=1-x; 27
f[i][j]=x+f[i-1][j],g[i][j]=y+g[i-1][j]; 28 if (j>0)
29 { 30 f[i][j]=mmax(f[i][j],x+g[i-1][j-1]); 31
g[i][j]=mmax(g[i][j],y+f[i-1][j-1]); 32 } 33 if (i==n)
ans=mmax(ans,mmax(f[i][j],g[i][j])); 34 } 35
printf(“%dn”,ans); 36 return 0; 37 } View Code


T2 滑雪课程(ski)

澳门新葡萄京官网注册 3

题意:有N个雪坡和S个课程。雪坡需要耗费一定的时间,且有技能点要求,课程也需要耗费一定的时间,但可以进修到一定的技能点数。问在时间T内最多能滑多少次雪坡。

有两种解法:(时间和内存哪种更优就看数据范围了~)

1.f[i][j]表示前i的时间内能力为j时能滑雪的最大次数,预处理一下p[i]为当能力为i时能花的所有雪坡中耗费时间最小的。每次分别用f[i][j]更新现在有课上便上课,和滑一次雪的状态。

注意——边界条件;只有当前状态存在(不为-1)才可拓展到其他的状态;f[i][j]除了更新上课或滑雪的,也要更新到f[i+1][j]。

澳门新葡萄京官网注册 4 1
#include<cstdio> 2 #include<cstdlib> 3
#include<cstring> 4 #include<iostream> 5
#include<algorithm> 6 using namespace std; 7 8 const int
T=(int)1e4+10,S=110,N=(int)1e5+10,C=100; 9 int f[T][C],p[C+10]; 10
struct node{int c,d;}a[N]; 11 struct hy{int m,l,c;}b[S]; 12 13 bool
cmp(hy x,hy y) {return x.m<y.m;} 14 void upd(int &x,int y)
{x=x>y?x:y;} 15 void upd2(int &x,int y) {x=x<y?x:y;} 16 int
mabs(int x) {return x>0?x:-x;} 17 18 int main() 19 { 20
//freopen(“ski.in”,”r”,stdin); 21 //freopen(“ski.out”,”w”,stdout); 22
int t,s,n; 23 scanf(“%d%d%d”,&t,&s,&n); 24 for (int i=1;i<=s;i++) 25
scanf(“%d%d%d”,&b[i].m,&b[i].l,&b[i].c); 26 sort(b,b+1+s,cmp); 27
for (int i=1;i<=n;i++) 28 scanf(“%d%d”,&a[i].c,&a[i].d); 29
memset(p,63,sizeof(p)); 30 for (int i=1;i<=n;i++) 31
upd2(p[a[i].c],a[i].d); 32 for (int i=1;i<=C;i++) 33
upd2(p[i],p[i-1]); 34 int tmp=1,ans=0; 35 memset(f,-1,sizeof(f)); 36
f[0][1]=0; 37 for (int i=0;i<=t;i++) 38 { 39 for (int
j=1;j<=C;j++) 40 { 41 if (f[i][j]<0) continue;// 42
upd(f[i+1][j],f[i][j]); 43
upd(f[i+p[j]][j],f[i][j]+1); 44 while (b[tmp].m==i &&
tmp<=s && i+b[tmp].l<=t) 45
upd(f[i+b[tmp].l][b[tmp].c],f[i][j]), tmp++; 46 if (i==t)
upd(ans,f[i][j]); 47 } 48 } 49 printf(“%dn”,ans); 50 return 0; 51
} View Code 1

2.f[i]表示上了第i节课能滑雪的最大次数,预处理同上。每次f[i]存枚举上一次上了哪节课,而到这节课的时间里滑雪或上课的最佳答案。

注意——边界条件;添加时间为0和时间为t的课程,保证“有始有终”。

澳门新葡萄京官网注册 5 1
#include<cstdio> 2 #include<cstdlib> 3
#include<cstring> 4 #include<iostream> 5
#include<algorithm> 6 using namespace std; 7 8 const int
T=(int)1e4+10,S=110,N=(int)1e5+10,C=100; 9 int f[S],p[C+10]; 10
struct node{int c,d;}a[N]; 11 struct hy{int m,l,c;}b[S]; 12 13
//bool cmp(hy x,hy y) {return x.m<y.m;} 14 void upd(int &x,int y)
{x=x>y?x:y;} 15 void upd2(int &x,int y) {x=x<y?x:y;} 16 int
mabs(int x) {return x>0?x:-x;} 17 18 int main() 19 { 20
//freopen(“ski.in”,”r”,stdin); 21 //freopen(“ski.out”,”w”,stdout); 22
int t,s,n,ans=0; 23 scanf(“%d%d%d”,&t,&s,&n); 24 for (int
i=1;i<=s;i++) 25 scanf(“%d%d%d”,&b[i].m,&b[i].l,&b[i].c); 26
b[0].m=0,b[0].l=0,b[0].c=1; 27 b[++s].m=t;//add terminal 28
//sort(b,b+1+s,cmp);//无须排序 29 for (int i=1;i<=n;i++) 30
scanf(“%d%d”,&a[i].c,&a[i].d); 31 memset(p,63,sizeof(p)); 32 for
(int i=1;i<=n;i++) 33 upd2(p[a[i].c],a[i].d); 34 for (int
i=1;i<=C;i++) 35 upd2(p[i],p[i-1]); 36 memset(f,-1,sizeof(f)); 37
f[0]=0; 38 for (int i=1;i<=s;i++) 39 { 40 if
(b[i].l+b[i].m>t) continue;// 41 for (int j=0;j<i;j++) 42 if
(f[j]>=0 && b[i].m>=b[j].m+b[j].l)// 43
upd(f[i],f[j]+mabs(b[i].m-b[j].m-b[j].l)/p[b[j].c]); 44
upd(ans,f[i]); 45 } 46 printf(“%dn”,ans); 47 return 0; 48 } View Code 2


T3 滑雪比赛(bobsled)

澳门新葡萄京官网注册 6

题意:初始速度为1,有N个限制速度大小的弯道,给出与起点的距离,问L内最大能达到的速度。

解法:先贪心——从后往前扫一遍来保证各弯道间的限制速度可以互相到达,因为速度有后效性(?),便直接保证了不用比较下一个的限制速度,还担心降不到下一个的限制速度。
接着保存每到一个弯道后的速度与距离,进而根据与下一个弯道的速度曲线的单调性(递增(多)—递减(少)、递增、递增(少)—递减(多)、递减)来算出其间的最大值,和到下一个弯道的速度。P.S.画图辅助会清晰一点。

注意——终点也可看成一个“弯道”,而没有限制速度。

澳门新葡萄京官网注册 7 1
#include<cstdio> 2 #include<cstdlib> 3
#include<cstring> 4 #include<iostream> 5
#include<algorithm> 6 using namespace std; 7 8 const int
L=(int)1e9+10,N=(int)1e5+10; 9 struct node{int t,v;} 10 a[N]; 11 12
bool cmp(node x,node y) 13 { 14 if (x.t!=y.t) return x.t<y.t; 15
return x.v<y.v; 16 } 17 int mmax(int x,int y) 18 { return x>y?x:y;
} 19 int mmin(int x,int y) 20 { return x<y?x:y; } 21 int main() 22 {
23 //freopen(“bobsled.in”,”r”,stdin); 24
//freopen(“bobsled.out”,”w”,stdout); 25 int l,n; 26 scanf(“%d%d”,&l,&n);
27 for (int i=1;i<=n;i++) 28 scanf(“%d%d”,&a[i].t,&a[i].v); 29
sort(a+1,a+1+n,cmp); 30 int p=0;a[0].t=-1; 31 for (int
i=1;i<=n;i++) 32 if (a[i].t!=a[i-1].t) a[++p]=a[i]; 33 n=p;
34 for (int i=n-1;i>=1;i–) 35
a[i].v=mmin(a[i].v,a[i+1].v+(a[i+1].t-a[i].t)); 36 int
t=0,v=1;//now 37 int x,ans=0; 38 for (int i=1;i<=n;i++) 39 { 40 if
(a[i].v>v) 41 { 42 if (a[i].t-t>=a[i].v-v)//= 43
x=a[i].v+((a[i].t-t)-(a[i].v-v))/2,v=a[i].v; 44 else
x=v+(a[i].t-t),v=x; 45 ans=mmax(ans,x); 46 } 47 else 48 { 49
x=v+((a[i].t-t)-(v-a[i].v))/2; 50 v=a[i].v; 51 ans=mmax(ans,x); 52
} 53 t=a[i].t; 54 } 55 ans=mmax(ans,v+(l-t)); 56 printf(“%dn”,ans);
57 return 0; 58 } View Code


T4 奶牛飞盘队(fristeam)

澳门新葡萄京官网注册 8

题意:有N头有一定能力的奶牛,问选出能力和为M的倍数的方案总数。

解法:要想到把%M的值作为DP数组的一个维度。f[i][j]表示在前i头奶牛中选到的能力和%M为j的方案数,这样每次只需分别选或不选当前第i头奶牛,由f[i-1]的状态推出。

澳门新葡萄京官网注册 9 1
#include<cstdio> 2 #include<cstdlib> 3
#include<cstring> 4 #include<iostream> 5 using namespace
std; 6 7 const int N=2010,M=1010,mod=(int)1e8; 8 int a[N],f[N][M];
9 10 int main() 11 { 12 //freopen(“fristeam.in”,”r”,stdin); 13
//freopen(“fristeam.out”,”w”,stdout); 14 int n,m; 15
scanf(“%d%d”,&n,&m); 16 for (int i=1;i<=n;i++) 17
scanf(“%d”,&a[i]),a[i]%=m; 18 for (int j=1;j<m;j++)
f[0][j]=0; 19 f[0][0]=1; 20 for (int i=1;i<=n;i++) 21 for
(int j=0;j<m;j++) 22 { 23 int x=j-a[i]; 24 if (x<0) x+=m; 25
f[i][j]=(f[i-1][j]+f[i-1][x])%mod; 26 } 27
printf(“%dn”,f[n][0]-1); 28 return 0; 29 } View Code

{20160927 19:30~21:30}
总分400分,我113.33,稳稳地垫底了……(十分呼应我上面的博客名,…

本文转载(3-3自己补充,可供参考):

源程序:

第一章
习题1-1
#include <stdio.h>
int main()
{
int a,b,c;
double d;
scanf(“%d%d%d”,&a,&b,&c);
d=(double)(a+b+c);
printf(“%.3lfn”,d/3.0);
return 0;
}

#include <iostream>
#include <math.h>
using namespace std;
int a1[1001],a2[1001],t1[1000],t2[1000];
澳门新葡萄京官网注册,int f1[1001],f2[1001];
int e1,e2,x1,x2,n;
void dp()
{
    int i;
    f1[1]=e1+a1[1];
    f2[1]=e2+a2[1];
    for(i=2;i<=n;i++)
    {
      f1[i]=min(f1[i-1]+a1[i],
f2[i-1]+t2[i-1]+a1[i]);
      f2[i]=min(f2[i-1]+a2[i],
f1[i-1]+t1[i-1]+a2[i]);
    }
    printf(“%dn”,min(f1[n]+x1,f2[n]+x2));
}
int main()
{
    int i;
    scanf(“%d”,&n);
    scanf(“%d%d%d%d”,&e1,&e2,&x1,&x2);
    for(i=1;i<=n;i++)
      scanf(“%d”,&a1[i]);
    for(i=1;i<=n;i++)
      scanf(“%d”,&a2[i]);
    for(i=1;i<n;i++)
      scanf(“%d”,&t1[i]);
    for(i=1;i<n;i++)
      scanf(“%d”,&t2[i]);
    
    dp();
return 0;
}

习题1-2
#include <stdio.h>
int main()
{
int f;
double c;
scanf(“%d”,&f);
c=5*(f-32)/9;
printf(“%.3lfn”,c);
return 0;
}

习题1-3
#include <stdio.h>
int main()
{
int n;
scanf(“%d”,&n);
printf(“%dn”,(n*(1+n))/2);
return 0;
}

习题1-4
#include <stdio.h>
#include <math.h>
#define pi 4.0*atan(1.0)
int main()
{
int n;
scanf(“%d”,&n);
printf(“%lfn”,sin((pi*n)/180));
printf(“%lfn”,cos((pi*n)/180));
return 0;
}

习题1-5
#include <stdio.h>
int main()
{
double x1,y1,x2,y2,a;
scanf(“%lf %lf %lf %lf”,&x1,&y1,&x2,&y2);
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf(“%lfn”,a);
return 0;
}

习题1-6
#include <stdio.h>
int main()
{
int n;
scanf(“%d”,&n);
if(n%2==0)
{
printf(“YESn”);
}
else
{
printf(“NOn”);
}
return 0;
}

习题1-7
#include <stdio.h>
int main()
{
int n;
double a;
scanf(“%d”,&n);
a=n*95.0;
if(a<300)
{
printf(“%.2lfn”,a);
}
else
{
printf(“%.2lfn”,a*0.85);
}
return 0;
}

习题1-8
#include <stdio.h>
#include <math.h>
int main()
{
double n;
scanf(“%lf”,&n);
printf(“%.2lf”,fabs(n));
return 0;
}

习题1-9
#include <stdio.h>
int main()
{
int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if(a==b&&b==c)
{
printf(“non”);
}
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
{
printf(“yesn”);
}
else
{
printf(“non”);
}
return 0;
}

习题1-10
#include <stdio.h>
int main()
{
int n;
scanf(“%d”,&n);
if(n%4==0)
{
if(n%100!=0)
{
printf(“non”);
}
else
{
if(n%400==0)
{
printf(“yesn”);
}
else
{
printf(“non”);
}
}
}
else
{
printf(“non”);
}
return 0;
}

第二章

习题2-1

#include <stdio.h>
int main()
{
int n,count=0;
scanf(“%d”,&n);
while(n>0)
{
count++;
n=n/10;
}
printf(“%dn”,count);
return 0;
}

习题2-2
#include <stdio.h>
int main()
{
int a,b,c;
for(int i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
printf(“%dn”,i);
}
}
return 0;
}

习题2-3
#include <stdio.h>
int main()
{
int i,a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
for(i=10;i<=100;i++)
{
if(i%3==a&&i%5==b&&i%7==c)
{
printf(“%dn”,i);
}
}
if(i==101)
{
printf(“no answern”);
}
return 0;
}

习题2-4
#include <stdio.h>
int main()
{
int i,j,k,n;
scanf(“%d”,&n);
for(i=n;i>0;i–)
{
for(k=0;k<n-i;k++)
{
printf(” “);
}
for(j=0;j<2*i-1;j++)
{

printf(“#”);
}
printf(“n”);
}
return 0;
}

习题2-5
文件题,南邮竞赛基本不涉及。。。
习题2-6
#include <stdio.h>
int main()
{
int i,n;
double sum=1.0;
scanf(“%d”,&n);
for(i=2;i<=n;i++)
{
sum+=(1.0/i);
}
printf(“%.3lfn”,sum);
return 0;
}

习题2-7
#include <stdio.h>
#include <math.h>
int main()
{
int t=-1;
double a=1.0,sum=1.0;
while(fabs(a)>=0.000001)
{
a=1.0/(a+2);
a=a*t;
sum=sum+a;
t=t*(-1);
}
printf(“%.9lfn”,sum);
return 0;
}

习题2-8
#include <stdio.h>
int main()
{
int i,n,m,temp;
double sum=0;
scanf(“%d%d”,&n,&m);
if(n>m)
{
temp=n;
n=m;
m=temp;
}
for(i=n;i<=m;i++)
{
sum=sum+(1.0/i/i);
}
printf(“%.5lfn”,sum);
return 0;
}

习题2-9
printf的特殊用法:对于m.n的格式可以用如下方法表示
    char ch[20];
    printf(“%*.*sn”,m,n,ch);
    前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。 这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。 
#include <stdio.h>
int main()
{
    int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%.*lfn”,c,(double)a/b);
return 0;
}

习题2-10

#include <stdio.h>
int main()
{
    int a,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
for(c=1;c<=9;c++)
{
for(d=1;d<=9;d++)
{
for(e=1;e<=9;e++)
{
for(f=1;f<=9;f++)
{
for(g=1;g<=9;g++)
{
for(h=1;h<=9;h++)
{
for(i=1;i<=9;i++)
{
if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))&&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i))
{
printf(“%d,%d,%dn”,a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
}
}
}
}
}
}
}
}
}
}
return 0;
}

                                第三章
习题3-1

#include <stdio.h>
#include <string.h>
int main()
{
int i,a[101],n,max;
memset(a,sizeof(a),0);
while(scanf(“%d”,&n)==1)
{
a[n]++;
}
max=a[0];
for(i=1;i<101;i++)
{
if(a[i]>=max)
{
max=a[i];
}
}
for(i=0;i<101;i++)
{
if(a[i]==max)
{
printf(“%d “,i);
}
}
printf(“n”);
return 0;
}

习题3-2

#include <stdio.h>
#include <ctype.h>
char s[1000];
int main()
{
char ch;
int i,j,m=0,sumlong=0,count=0;
while(1)
{
scanf(“%c”,&ch);
if(ch==’n’||ch==EOF)
{
break;
}
else
{
s[m++]=ch;
}
}
for(i=m-1;i>0;i–)
{
if(s[i]==’ ‘&&s[i-1]==’ ‘)
{
for(j=i-1;j<m-1;j++)
{
s[j]=s[j+1];
}
m–;
}
}
for(i=0;i<m;i++)
{
if(isalpha(s[i]))
{
sumlong++;
}
else if(s[i]==’ ‘)
{
count++;
}
}
printf(“%.2lfn”,(double)((sumlong+count+1)/(count+1)));
return 0;
}

习题3-3(该题自己补充可以参考)

#include <iostream>
#include <cctype>
#include <math.h>
#include <iomanip>
using namespace std;
char ch_a[100];
int i_b[100];
int main()
{

//1.首先输入数据存储到字符数组中以空格代表结束,判断是数字还是字母(0~9
ASCII码48~57)
char ch;
int i=0;
int n=0;
int sum=1;

while(1)
{
scanf(“%c”,&ch);
if (ch ==’n’|| ch
==EOF)//输入结束
{

//处理最后一个数据,最后一个数据是以回车结尾的
for (int j =
0;j<i;j++)//判断是数字还是字符串
{
if
(ch_a[j]<‘0’||ch_a[j]>’9’)
{
//不是数字
i = 0;
break;
}
else if (j == i-1 && (ch_a[j] >=
‘0’&& ch_a[j] <= ‘9’))//判断到最后一个了,是一个整数
{

//此时需要转换数据,存储到新的整数数组中
for (int temp_j = i-1;temp_j >=
0;temp_j–)
{
i_b[n] +=
(ch_a[temp_j]-‘0’)*pow(10.0,(i-1) – temp_j);
}
n++;
i = 0;
}
}
//end of最后一个数据处理
break;
}
else if (ch == ‘
‘)//输入空格,代表一个完整的数据输入完成,此时需要判断该数据的类型
{
for (int j =
0;j<i;j++)//判断是数字还是字符串
{
if
(ch_a[j]<‘0’||ch_a[j]>’9’)
{
//不是数字
i = 0;
break;
}
else if (j == i-1 && (ch_a[j] >=
‘0’&& ch_a[j] <= ‘9’))//判断到最后一个了,是一个整数
{

//此时需要转换数据,存储到新的整数数组中
for (int temp_j = i-1;temp_j >=
0;temp_j–)
{
i_b[n] +=
(ch_a[temp_j]-‘0’)*pow(10.0,(i-1) – temp_j);
}
n++;
i = 0;
}
}
}
else //存储数据,继续输入
{
ch_a[i++] = ch;
}

}

//此时所有整数数据都存储到i_b[]数组中了
for (int temp_j2 = 0;
temp_j2<n;temp_j2++)
{
sum *= i_b[temp_j2];
}
cout<<setw(3)<<setfill(‘
‘)<<right << sum % 1000 << endl;
return 0;
}

习题3-4

习题3-5
#include <stdio.h>
char a[1000][1000];
int main()
{
int i,j,n;
scanf(“%d”,&n);
scanf(” “);
char temp;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf(“%c”,&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
for(i=n-1;i>=0;i–)
{
for(j=0;j<n;j++)
{
printf(“%c “,a[i][j]);
}
printf(“n”);
    }
return 0;
}

习题3-6
#include <stdio.h>
int main()
{
int b,n,m=0;
char p[100];
scanf(“%d%d”,&b,&n);
while(b!=0)
{
p[m++]=b%n+’0′;
b=b/n;
}
for(int i=m-1;i>=0;i–)
{
printf(“%c”,p[i]);
}
printf(“n”);
return 0;
}

习题3-7
#include <stdio.h>
int ndjc(int n,int m)
{
int i,a=1;
for(i=0;i<n;i++)
{
a*=m;
}
return a;
}
int main()
{
int i,b,n,p[100],m=0,a=0;
scanf(“%d %d”,&n,&b);
while(n>0)
{
p[m++]=n%10;
n=n/10;
}
m–;
for(i=m;i>=0;i–)
{
a+=p[i]*ndjc(i,b);
}
printf(“%dn”,a);
return 0;
}