第四次测试
Description
输入一个正整数n,输出n度的正弦、余弦函数值。注意调用正余弦函数,要加#,函数参数为弧度。
Input
输入一个正整数(不大于10000)
Output
分2行分别输出n度的正弦和余弦函数值,保留2位小数
Sample Input
90
Sample Output
1.00
0.00
Source
一:源代码
#include<stdio.h>
#include<math.h>
#define PI acos(-1)
int main()
{
int n;
double a,b;
scanf("%d",&n);
a=sin(PI*n/180);
b=cos(PI*n/180);
printf("%.2f\n",a);
printf("%.2f\n",b);
return 0;
}
二:结果截图
这个题目只需要通过<math.h>头文件来运用sin和cos函数即可,用%.2f来保留2位小数。用
#define PI acos(-1)这个方式来去π的值已经很常见。
这个题目主要是要求掌握用角度求余弦和正弦的公式。
1179 problem B:判断是否闰年
Description
输入年份,判断是否闰年
Input
输入一个整数n表示年份如果是闰年,输出yes,否则输出no
Output
如果是闰年,输出yes,否则输出no
Sample Input
2000
Sample Output
yes
Source
一:源代码
#include<stdio.h> int main() { int n; scanf("%d",&n); if((n%4==0&&n%100!=0)||n%400==0)printf("yes\n"); else printf("no\n"); return 0; }
二:结果截图
三:思路和感受
这个题目就是以前用学C的时候判断闰年最基本的方法。
1180 problem C :求阶乘
Description
输入一个正整数n(n<10),计算它的阶乘
Input
输入一个正整数n(n<10)
Output
输出n的阶乘
Sample Input
3
Sample Output
6
Source
一:源代码
#include<stdio.h> int main() { int n,i,s=1; scanf("%d",&n); if(n<10) { for(i=n;i>0;i--) s=s*i; printf("%d\n",s); } return 0; }
二:结果截图
三:思路和感受
c中简单的求阶乘。
1181 problem D :矩阵转置
Description
现要求你把一个矩阵行列转置后输出,注意行数和列数可能不相同的。
Input
多组测试数据,每组测试数据先在一行输入n 和m ,表示这个矩阵的行数和列数(1 < n,m <= 10)
然后是n行m列的一个矩阵Output
对于每组测试数据输出转置后的矩阵
Sample Input
3 2 1 2 3 4 5 6
Sample Output
1 3 5 2 4 6
Source
一:源代码
#include<stdio.h>
int main() { int m,n,a[10][10],i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) { for(j=0;j<m;j++) scanf("%d",&a[i][j]); } if((1<n&&n<=10)&&(1<m&&m<=10)) { for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%d ",a[j][i]); if(j==n-1)printf("\n"); } } } } return 0; }
二:结果截图
三:思路和感受
这个题目倒是废了点时间,之前没用数组,结果发现无法储存数字,后来运用之后,printf("%d ",a[j][i]);这一句后面的空格没有加,输出格式有问题;之后这一句,if(j==n-1)printf("\n");没有加,也不让过。
在第二次输入的时候,之前的m,n的位置写反了,虽然第一次是对的,但是第二次循环的时候就有问题了。
看来ACM 还是需要耐心和细心。
1182 problem E:进制转换
Description 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。 Output 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 Sample Input 7 2
23 12
-4 3 Sample Output 111
1B
-11 Source |
一:源代码
#include<stdio.h>
int main()
{
int n,a[32];
int R,i,j;
while(scanf("%d%d",&n,&R)!=EOF)
{
if(n<0)
{
n=-n;
printf("-");
}
if(2<=R&&R<=16&&R!=10)
{
if(2<=R&&R<10)
{
for(i=0;n!=0;i++)
{
a[i]=n%R;
n=n/R;
printf("%d",a[i]);
}
printf("\n");
}
else
{
for(i=0;n!=0;i++)
{
a[i]=n%R;
n=n/R;
}
for(j=i-1;j>=0;j--)
{
if(a[j]==10)printf("A");
else if(a[j]==11)printf("B");
else if(a[j]==12)printf("C");
else if(a[j]==13)printf("D");
else if(a[j]==14)printf("E");
else if(a[j]==15)printf("F");
else printf("%d",a[j]);
}
printf("\n");
}
}
}
return 0;
}
二:结果截图
三:思路和感受
这个题目自我感觉是这次测试最难的一个题目。
首先负号就让我为难了好久,开始准备用unsigned来定义的,但是输出的结果不对。后来才想到if(n<0){n=-n;printf("-");} 这样来表示。
然后就是如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。这个条件不知道怎么表达。开始本来想用数组来一一对应,但是发现实现不了,后来说直接对应,用了If, if(a[j]==10)printf("A"); ,结果这样可以行得通。
for(i=0;n!=0;i++) {a[i]=n%R;n=n/R;printf("%d",a[i]);} 这个就是把十进制N转换为R进制的方法,数学里有学到。
这个题目需要考虑到的东西其实还是很多的。
1183 problem F:反话连篇
Description
把输入的字符按照反着顺序输出
Input
多组测试数据
每组一行
Output
按照输入的顺序反着输出各个字符
Sample Input
I am a boy.
Sample Output
.yob a ma I
Source
一:源代码
#include<stdio.h>
#include<string.h>
int main()
{
int i,n;
char s[10000];
while(gets(s))
{
n=strlen(s);
if(n>1)
{
for(i=n-1;i>=0;i--)
printf("%c",s[i]);
}
}
return 0;
}
二:结果截图
三:思路和感受
循环输入字符串这个很郁闷,首先用了 while(printf("%s",&s)!=EOF),实现不了,后来运用了好几种方法还是不行,最后只能用while(gets(s))才能实现循环输入。
之后就是把输入的反向输出就好。
这次的ACM 前几个题目还算简单,就是E花了点时间,运用上学期的知识比较多。