ZJNU---ACM
最近准备考试,但是闲来手痒,于是打算把初级题再过一遍,毕竟基础和仔细程度还是有待提高的。
1013
给出一个不多于5位的非负整数,要求
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
水题,一开始老是错,后来发现有一组样例没过,当为0的时候是1位数。
#include
int main()
{
int n,i=0,a[6]={0},j=0,k;
scanf("%d",&n);
if(n==0) j=1;
while(n!=0)
{
a[i]=n%10;
j++; i++;
n=n/10;
}
printf("%d\n",j);
for(k=j-1;k>=0;k--)
{
if(k==0) printf("%d",a[k]);
else printf("%d ",a[k]);
}
printf("\n");
for(k=0;k<=j-1;k++)
printf("%d",a[k]);
printf("\n");
}
所以只需对0进行特判就好了。
1022
发现打出来还是要经常出错
Sn=2+22+222+2222+22222+22...2222(最后一项n个2)
#include
int main()
{
int m,n,t,i;
scanf("%d",&n);
m=0; t=2;
for(i=1;i<=n;i++)
{
m=m+t;
t=t*10+2;
}
printf("%d\n",m);
return 0;
}
注意是t=t*10+2;
1023
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。
#include
int main()
{
int n,i,s=1,j,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{ s=1;
for(j=1;j<=i;j++)
s=s*j;
sum+=s;
}
printf("%d\n",sum);
}
1024
求以下三数的和,保留2位小数
1~a之和
1~b的平方和
1~c的倒数和
对于这个,我只想说用double 类型时,求1~c的倒数和时,注意是1.0/c; 要不然精度会有问题。
1027
有一分数序列:
2/1 3/2 5/3 8/5 13/8 21/13......
求出这个数列的前N项之和,保留两位小数。
这道题 也就是小心点就好啦 就是当赋值的时候注意给一个中间变量 要不然值都覆盖了
1029
猴子吃桃问题,哈哈,现在做起来思路更加顺利了。
就是假设n-1天有s个,其实它的实质也是一个递归,得到公式s=2*(x+1); 并把x=s;然后一个for就可以了。
1039
写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
其实就是一个改变输出方式的问题
#include
int main()
{
int a[4][4],i,j,t;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
printf("%d ",a[j][i]);
printf("\n");
}
}
1041
将两个字符串连接。
说实话,我只是想说我后来才用到strcat这个函数,函数是十分方便的。
#include
#include
int main()
{
char a[100],b[100];
int i,j;
gets(a);
gets(b);
printf("%s",strcat(a,b));
return 0;
}
1051
就是读入字符串的问题,有两种方式。
一种是while((c=getchar())!='\n') ; 就是相当于是一个个的读入;
另一种是用gets(c); 然后读入长度,也是这样判断; 反正实质是一样的啦。
1053
字符串大小的比较; 以前我想的很复杂,后来再去打了一遍,发现用函数来写很方便;核心代码如下:
for(i=1;i<=2;i++)
for(j=i+1;j<=3;j++)
{
if(strcmp(str[i],str[j])>0){
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
1054
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;
①输入10个数;②进行处理;③输出10个数。
这道题考了一个细节需要想到,就是当min=a[10], max=a[1]时要怎么处理,这是就只需要交换一次就可以了,要不然就属于重复交换了。
#include
int main()
{
int a[11],t,i,j,k,max,min,p,q;
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
max=min=a[1]; p=q=1;
for(i=2;i<=10;i++)
{
if(a[i]>max) { max=a[i]; p=i;} //p是最大的那个下标
else if(a[i]
1055
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数
主要讲思路,就是先把后面的m个复制到新的一个数组里面,接着把前面的复制过去就可以了。
#include
int main()
{
int n,m,a[1000],b[1000],i,j,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=n-m+1,j=1;i<=n;i++,j++)
b[j]=a[i];
for(i=1;i<=n-m;i++,j++)
b[j]=a[i];
for(i=1;i<=j-1;i++)
printf("%d ",b[i]);
}
1060
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
就是那个比较,就只要比较每个学生的某一门课就好了,毕竟他是最高分啊。
t=1;
for(j=1;j<=3;j++)
{
for(i=2;i<=n;i++)
{
if(s[t][j]
基本功很重要,反应要快才可以。
加油吧,最终一定能踏上那条荣耀之路的。