第二次周练

第一题:

 这道题最主要的是找规律,和斐波那契数列一样;下表是规律

从第四站开始 a 前面的系数等于前两站 a 的系数之和减一; 从第四站开始 b 前面的系数等于前两站 b 的系数之和加一;因此我们需要用两个数组把a 和 b 的系数存起来,前三项没有规律我们需要把前三项列举出来。

#include<stdio.h>

int main()
{
	int numa[25]={0,1,1,2};
	int numb[25]={0,0,0,0};
	int i,a,b,n,m,x;
	scanf("%d %d %d %d",&a,&n,&m,&x);
	for(i=4;i<n;i++)
	{
		numa[i]=numa[i-1]+numa[i-2]-1;
		numb[i]=numb[i-1]+numb[i-2]+1;
	} 
    b=(m-a*numa[n-1])/numb[n-1];
	printf("%d",numa[x]*a+numb[x]*b);
	
	return 0;
}

第二题:进制转化

  在负进制,如果余数<0,那么:余数-=m;商++; 

#include<stdio.h>

int jinzhizhuanhua(int n,int a,char c[])
{
	int i=0,r;
	while(n!=0)
	{
		r=n%a;
		n/=a;
		if(r<0)        //负进制的核心
		{
			r=r-a;     //如果余数是负数则减去负进制数
			n++;       //向上取整
		}
		if(r>9)
		{
			c[i]=r-10+'A';
		}
		else c[i]=r+'0';
		i++;
	}
	return i-1;
}


int main()
{
	int n,a,j;
	char c[100];
	scanf("%d %d",&n,&a);
	printf("%d=",n);
	if(n==0) printf("0");
	else
	{
		for(j=jinzhizhuanhua(n,a,c);j>=0;j--)
			printf("%c",c[j]);
	}
	printf("(base%d)",a);
	return 0;
}

第三题:

这道题和上周的原版类似主要是判断三次质数,需要两次循环

#include<stdio.h>
#include<math.h>

int zhishu(int n)
{
	int i,q;
	q=(int)sqrt(n);
	if(n==1) return 0;
	for(i=2;i<=q;i++)
	{
		if(n%i==0) return 0;
	}
	return 1;
}

int main()
{
	int i,k,j,t,x;
	int n,falg=0;
	scanf("%d",&n);
	for(i=2;i<n-4;i++)
	{
		k=i;
		if(zhishu(k))
		{
			for(j=2;j<n-4;j++)
			{
				t=j;
				if(zhishu(t))
				{
					x=n-k-t;
					if(zhishu(x))
					{
						printf("%d %d %d",k,t,x);
						falg=1;        //需要用来判断,跳出外循环
						break;
					}
				}
			}
			if(falg==1) break;
		}
	}
    return 0;
}

 第四题:

 这道题主要是逆向思维,每次翻转 n-1 次实际就相当于翻转一个,所以 n 个硬币需要翻转 n 次;

第几次翻转只需要把第几个硬币不翻转,其余 n-1 个翻转。

#include "stdio.h"
int main()
{
	int n,i,j;
	int a[102]={0};
	scanf("%d",&n);
	printf("%dn",n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			if(j!=i)
			{
				if(a[j]) a[j]=0;
				else a[j]=1;
			}
			printf("%d",a[j]);
		}
		printf("n");
	}
	return 0;
}

第五题:

#include<stdio.h>
int main()
{
	int n,k;
	int sum=0;
	scanf("%d %d",&n,&k);
	sum+=n;
	while((n-k)>=0)    //当烟头数大于k时继续循环
	{
		n=n-k;		//每抽k根烟,剩余的烟数量 
		sum++;		//多抽一根烟 
		n++;		//得到一个烟头 
	}
	printf("%d",sum);
	return 0;
}

 大佬解法(大家一起学习)

#include<stdio.h>
int main()
{
	int n,k;
	int sum;
	scanf("%d %d",&n,&k);
	sum=n+(n-1)/(k-1);
	printf("%d",sum);
	return 0;
}

第六题:

 

 字符串

#include<stdio.h>
#include<string.h>
int main()
{
    char a[15];
    int n,i,j;
    scanf("%s",a);
    n=strlen(a);
    i=n-1;
    while(1)
    {
    	if(a[i]=='0')
    		i--;
    	else break;
	}
	if(a[0]=='-')
	{
		printf("-");
		for(;i>0;i--)
			printf("%c",a[i]);
	}
	else
	{
		for(;i>=0;i--)
			printf("%c",a[i]);
	}
    return 0;
}

数字,以为题目要求 -1000000000<=N<=1000000000,在整形范围内

#include<stdio.h>
int main()
{
	int n,t,sum=0;
	scanf("%d",&n);
	if(n<0)
	{
		printf("-");
		n=-n;
	}
	if(n%10==0) n/=10;
	while(n!=0)
	{
		t=n%10;			//将n的最后一位取出来 
		sum=sum*10+t;	//将n翻转 
		n/=10;			//将n去掉一位 
	}
	printf("%d",sum);
	return 0;
}

第七题:

 

#include<stdio.h>

int yueshu(int n,int m)
{
	int r;
	r=n%m;
	while(r)
	{
		n=m;
		m=r;
		r=n%m;
	}
	return m;
}
int max(int x,int y)
{
	return x>y?x:y;
}
int min(int x,int y)
{
	return x<y?x:y;
}

int main()
{
	int a,b,c;
	int max1,min1,yue;
	scanf("%d %d %d",&a,&b,&c);
	max1=max(max(a,b),c);
	min1=min(min(a,b),c);
	yue=yueshu(max1,min1);
	printf("%d/%d",min1/yue,max1/yue);
	return 0;
}

第八题:

简单的枚举

#include<stdio.h>
#include<string.h>
int main()
{
	char a[205],ch;
	int n,i,sum=0;
	gets(a);
	n=strlen(a);
	for(i=0;i<n;i++)
	{
		ch=a[i];
		if(ch=='a'||ch=='d'||ch=='g'||ch=='j'||ch=='m'||ch=='p'||ch=='t'||ch=='w')
			sum++;
		if(ch=='b'||ch=='e'||ch=='h'||ch=='k'||ch=='n'||ch=='q'||ch=='u'||ch=='x')
			sum=sum+2;
		if(ch=='c'||ch=='f'||ch=='i'||ch=='l'||ch=='o'||ch=='r'||ch=='v'||ch=='y')
			sum=sum+3;
		if(ch=='s'||ch=='z') 
			sum=sum+4;
	}
	printf("%d",sum);
	return 0;
}

 下标法,ASCII码值法

#include<stdio.h>
#include<string.h>
int main()
{
	char a[205],ch;
	int num[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
	int n,i,sum=0;
	gets(a);
	n=strlen(a);
	for(i=0;i<n;i++)
	{
		ch=a[i];
		if(ch>='a'&&ch<='z') sum+=num[ch-'a'];
		if(ch==' ') sum++;
	}
	printf("%d",sum);
	return 0;
}

第九题:

#include<stdio.h>
#include<string.h>

int max(int a,int b)  //求最大值函数 
{
	return a>b?a:b;
}


int main()
{
	int num[26]={0};
    int i,j,n,max1=0;
	char a[85];
    for(i=0;i<4;i++)
    {
        gets(a);
        n=strlen(a);
        for(j=0;j<n;j++)
		{
			if(a[j]>='A'&&a[j]<='Z')
				num[a[j]-'A']++;
		}
    }
    for(i=0;i<26;i++)				//找出柱形图的最高数 
		max1=max(max1,num[i]);
    for(i=max1;i>0;i--)				//从最高数开始递减 
	{
    	for(j=0;j<26;j++)			//把每个字母都循环一变 
    	{
    		if(num[j]>=i)			//如果这个字母出现的次数大于外循环的变量就打印 * ,否则打印空格  
				printf("* ");
			else 
				printf("  ");   		
		}
		printf("n");
	}
    printf("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z");
}

 第十题:

  凑个数吧 

#include<stdio.h>
int main()
{
	int n,i,j;
	int a[100],b[100]={0};
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
	{
		for(j=0;j<i;j++)
		{
			if(a[i]>a[j])
				b[i]++;
		}
	}
	for(i=0;i<n;i++)
		printf("%d ",b[i]);
}

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>