ZJNU初级题——水题

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]


基本功很重要,反应要快才可以。

加油吧,最终一定能踏上那条荣耀之路的。

你可能感兴趣的:(acm,ZJNU初级题水题,模拟题)