昨儿睡多了,今天精力充沛,写了9道题:
第1108题
注意下别越界就好,代码如下:
#include <stdio.h>
int gcd(int n,int m){
if(m==0){
return n;
}
else{
gcd(m,n%m);
}
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d\n",n*m/gcd(n,m));
}
return 0;
}
第2031题
递归调用函数用栈,所以先输出的放在低位。
#include<stdio.h>
void binary(int n, int r)
{
int m;
if (n == 0)
return;
else
{
binary(n / r, r);
m = n % r;
if (m<10)
printf("%d", m);
else
printf("%c", 'A' + m - 10);
}
}
int main()
{
int N, R;
while (scanf("%d %d", &N, &R) != EOF)
{
if (N == 0)
printf("%d", 0);
else if (N<0)
{
printf("-");
N = -N;
}
binary(N, R);
printf("\n");
}
return 0;
}
第2081题
需要注意在输入数据时,最后点击的回车也会算入输入的字符中,scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完a[j]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,printf()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误 .
#include<stdio.h>
int main()
{
int n,i,j;
char a[99999];
scanf("%d",&n);
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<11;j++)
{
scanf("%c",&a[j]);
}
printf("6");
for(j=6;j<11;j++)
{
printf("%c",a[j]);
}
printf("\n");
}
return 0;
}
第2091题
i为行j为列,由图可推得规律,最后一行全部输出,其余行只输出第n-i+1列和第n+i-1列,其他列为空,为了实现每个三角形之间空上一行,设置一个flag,初值为0,当flag不等于0时才输出空格,最开始输入数据后由于还没输出三角形,所以不用换行,当输出完一个三角形后,flag被设置为1,需要换行。
#include<stdio.h>
char A[3];
int n;
int main() {
int flag=0;
while(scanf("%s",A)) {
if(A[0]=='@')
break;
scanf("%d",&n);
if(flag)
printf("\n");
flag=1;
for(int i=1;i<n;++i) {
for(int j=1;j<=n+i-1;++j)
if(j==(n-i+1)||j==(n+i-1))
printf("%c",A[0]);
else
printf(" ");
printf("\n");
}
for(int i=1;i<=2*n-1;++i)
printf("%c",A[0]);
printf("\n");
}
return 0;
}
第1720题
不知道大家看到这题的第一思路是什么?先转化为10进制再加一起是吗?那不如看看这个代码:
#include <stdio.h>
int main(void)
{
int a, b;
while(scanf("%x%x", &a, &b) != EOF) {
printf("%d\n", a + b);
}
return 0;
}
巧用%x,%d化繁为简,妙!
第1062题
现将每个text顺序逆置,然后整体输出。
#include<stdio.h>
#include<string.h>
char s[1002];
int main()
{
int test,i,j,len,k;
scanf("%d",&test);
getchar();
while(test--)
{
gets(s);
len=strlen(s);
for(i=0,k=0;i<len;i++)
{
if(s[i]==' ')
{
for(j=i-1;j>=k;j--)
{
printf("%c",s[j]);
}
printf(" ");
k=i+1;
}
}
for(j=len-1;j>=k;j--)
printf("%c",s[j]);
printf("\n");
}
return 0;
}
第2000题
“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
如:
scanf("%d %*d %d",&a,&b);
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
%*c作用时读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符
#include<stdio.h>
int main()
{
char a,b,c,tm;
while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF)
{
if(a>b)
{
tm=a;a=b;b=tm;
}
if(a>c)
{
tm=a;a=c;c=tm;
}
if(b>c)
{
tm=b;b=c;c=tm;
}
printf("%c %c %c\n",a,b,c);
}
return 0;
}
第2001题
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,d,X;
while(scanf("%f %f %f %f",&a,&b,&c,&d)!=EOF)
{
X=sqrt((a-c)*(a-c)+(b-d)*(b-d));
printf("%.2f\n",X);
}
return 0;
}
第2136题
在未给数组赋值时默认数组中的所有值都为0,i=2时ans++,ans=1,a[2]=a[4]=a[6]=a[8]=1,有的同学这时会有疑问,a[6]按照题中的要求应该是质数3的序号啊,别急,我们继续,i=3时,ans=2,a[3]=a[6]=a[9]=2,这不就把刚刚那个值覆盖了吗!
#include <stdio.h>
#define maxn 1000000+5
int a[maxn];
int main()
{
int ans=0;
for(int i=2;i<maxn;i++)
{
if(!a[i])
{
ans++;
for(int j=i;j<maxn;j+=i)
a[j]=ans;
}
}
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}
女神最美!