第几天
#include<stdio.h>
int main(){
int y,i,d,j,sum=0;
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d/%d/%d",&y,&i,&d)!=EOF) {
if(y%4==0&&y%100!=0||y%400==0){
m[1]=29;
}
else{
m[1]=28;
}
*第一次自己做没有注意这一部分,是闰年的时候就会被改成29,多组输入,下一次继续判断*
for(j=0;j<i-1;j++){
sum=m[j]+sum;
}
sum=sum+d;
printf("%d\n",sum);
sum=0;
}
return 0;
}
水仙花数
#include<stdio.h>
int main(){
int m,n;
int i;
int a,b,c;
int s[100]={0};
while(scanf("%d%d",&m,&n)!=EOF){
if(m>n){
int t;
t=m;
m=n;
n=t;
}
int j=0;
for(i=m;i<=n;i++){
a=i/100;
b=i%100/10; *注意*
c=i%10;
if(a*a*a+b*b*b+c*c*c==i){
s[j]=i;
j++;
}
}
if(j==0){
printf("no\n");
} else{
printf("%d",s[0]);
for(i=1;i<j;i++){
printf(" %d",s[i]); *注意数组输出格式*
}
printf("\n");
}
}
return 0;
}
三足鼎立
1.tan(a+b) = ( tan(a) + tan(b) ) / (1 – tan(a) * tan(b) )
2.tan( arctan(x) ) = x
arctan(1/s) = arctan(1/u)+arctan(1/v)
所以得1/s = tan( arctan(1/u)+arctan(1/v) ) = (tan(arctan(1/u)) + tan(arctan(1/v)))/(1-tan(arctan(1/u))tan(arctan(1/v))) = (1/u + 1/v) / (1 - 1/(uv))
所以解得 uv = 1 + us + vs
所以vu-su-sv恒等于1
#include<stdio.h>
int main(){
int t,m,n;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&m,&n);
printf("1\n");
}
return 0;
}
输入一个年份 y,一个数字n,输出y后的第n个闰年
#include<stdio.h>
int main(){
int t;
int y,n;
scanf("%d",&t);
while(t--){
int count=0;
scanf("%d%d",&y,&n);
while(count!=n){
if(y%4==0&&y%100!=0||y%400==0){ *从y后开始判断每一年是否为闰年,直到coun=n跳出循环*
count++;
}
y++;
}
printf("%d\n",y-1); *当count=n时,y还加了1,所以输出y-1*
}
return 0;
}
偶数求和
#include<stdio.h>
int main(){
int n,m,x;
while(scanf("%d%d",&n,&m)!=EOF){
x=2;
int a,c=0;
for(int i=0;i<n/m;i++){
a=x+m-1; *对于前几项来说,平均值为x+m-1*
if(c==0){
printf("%d",a);
c++;
} *输出格式 第一项前没有空格,其余都有*
else{
printf(" %d",a);
}
x=x+2*m; *等差数列第一项的值*
}
if(n%m!=0){
a=x+n%m-1; *最后剩余几项的平均值*
printf(" %d",a);
}
printf("\n");
}
return 0;
}
数字根
#include<stdio.h>
#include<string.h>
int main(){
char n[1000]; *不一定为两位数,所以定义一个一维数组每个位置存储一个数*
int a,sum;
while(scanf("%s",n)){
if(n[0]=='0'){
break;
}
sum=0;
for(int i=0;n[i]!='\0';i++){
sum=sum+n[i]-'0'; *sum为各个位数的和* *字符减字符 ASCII表 啊啊大概就是这意思*
}
while(sum>=10){
a=0;
while(sum!=0){
a=a+sum%10; *对每位上的数字求和,直到和<10*
sum=sum/10;
*例如:sum=123;a=0+123%10=0+3=3;sum=123/10=12;a=3+12%10=3+2=5;sum=12/10=1;a=5+1%10=5+1=6;sum=1/10=0;跳出循环,数字根即为6*
}
sum=a;
}
printf("%d\n",sum);
}
return 0;
}
Sample Input
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
15
6
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m,i,a,sum=0;
scanf("%d",&m);
for(i=0;i<m;i++){
scanf("%d",&a);
sum=sum+a;
}
if(n!=0)
printf("%d\n\n",sum); *和与和之间输出一行空行*
else
printf("%d\n",sum); *去掉这个变Presentation Error* *n从n开始减到0,前几个数后有空行,最后一行数后没有空行*
}
}
Sample Input
2
1 5
10 20
Sample Output
6
30
#include<stdio.h>
int main(){
int n;
int a,b;
scanf("%d",&n);
int sum=0,i;
for(i=0;i<n;i++){
scanf("%d%d",&a,&b);
sum=a+b;
printf("%d\n",sum);
}
return 0;
}
数列有序
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
#include<stdio.h>
int main(){
int n,m;
while(scanf("%d%d",&n,&m)&&(n||m)){ *多组输入,且都不为0*
int a[101];
int i,j=0;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(j=0;j<n;j++){
if(m<a[j]){ *找到要插入的位置*
break;
}
}
for(i=n-1;i>=j;i--){ *从最后一位开始往后移一位*
a[i+1]=a[i];
}
a[j]=m;
printf("%d",a[0]);
for(i=1;i<n+1;i++){
printf(" %d",a[i]); *输出格式*
}
printf("\n");
}
return 0;
}