2016题
将输入的数放在一个数组中,在输入的同时去寻找最小数的下标。建立好数组后将最小下标的那个数于第一个数做一个交换。
#include<stdio.h>
int main(){
int len,i,b=0,min,t;
while(scanf("%d\n",&len)!=EOF)
{ if(len==0){return 0;}
int shuzu[len],min,t;
for(i=0;i<len;i++)
{
scanf("%d",&shuzu[i]);
if(i==0){min=shuzu[i];}
if(shuzu[i]<min){min=shuzu[i];b=i;}
}
t=shuzu[0];shuzu[0]=shuzu[b];shuzu[b]=t;
for(i=0;i<len-1;i++)
{
printf("%d ",shuzu[i]);
}printf("%d\n",shuzu[len-1]);b=0;
}return 0;
}
2017题
建立一个字符串数组,然后在每个字符串数组中寻找数字同时计数。
#include<stdio.h>
#include <cstring>
int main()
{
int hangshu,i,count=0,c;
char a;
while(scanf("%d",&hangshu)!=EOF)
{
for(i=0;i<hangshu;i++)
{
char shuzu[100];
scanf("%s",shuzu);
for(c=0;c<strlen(shuzu);c++)
{
if(shuzu[c]>='0'&&shuzu[c]<='9'){count++;}
}
printf("%d\n",count);
count=0;
}
}
return 0;
}
2018题
我将牛分为老,中,新三种,因为每新出身的牛要第4年才能生育,中间要隔3年,所以有一些中间态不能生育的牛。所以建立三个数组分别代表老,中,新。
主要的递归是
1.今年可以生育的牛等于去年可以生育的牛加上三年前刚出生的牛。
2.中间态的牛等于去年中间态的牛加上去年新生的牛还要减去三年前出生的已经长大的牛。
3.新生的牛就是等于今年可以生育的牛。
不过在前4年并不是按照这个规律,所以要先单独列出。
最后只要输出老中新三组数组最新牛数的总和即可。
#include<stdio.h>
int main()
{
int year,cow,i,c,b;
while(scanf("%d\n",&year)!=EOF)
{
if(year==0){break;}
int old_cow[year],middle_cow[year],new_cow[year];
for(i=0;i<4;i++){old_cow[i]=1;}
middle_cow[0]=0;middle_cow[1]=0; middle_cow[2]=1;middle_cow[3]=2;
new_cow[0]=0;new_cow[1]=1;new_cow[2]=1;new_cow[3]=1;
for(i=4;i<year;i++)
{
old_cow[i]=old_cow[i-1]+new_cow[i-3];
middle_cow[i]=middle_cow[i-1]+new_cow[i-1]-new_cow[i-3];
new_cow[i]=old_cow[i];
}
printf("%d\n",old_cow[year-1]+middle_cow[year-1]+new_cow[year-1]);
}
return 0;
}
2019题
思路是先建立一个数组储存数组,然后找到应该插入的位置,讨论插入位置的不同情况输出不同的数列。就讨论,插入头,尾,中间,三种情况就行。
#include<stdio.h>
#include <cstring>
int main()
{
int len,charu,i,j,m,n,b=0,k;
while(scanf("%d %d",&len,&charu)!=EOF)
{if(len==0&&charu==0){break;}
int shulie[len];
for(i=0;i<len;i++)
{
scanf("%d",&shulie[i]);
}
int new_shulie[len+1];
for(j=0;j<len+1;j++)
{
if(shulie[j]<charu){new_shulie[j]=shulie[j];}else{b=j;break;}
}
if(b==0){
new_shulie[len]=charu;
for(m=0;m<len+1;m++)
{
if(k=len){printf("%d",new_shulie[k]);}
else{printf("%d ",new_shulie[k]);}
}
}
else
{
new_shulie[b]=charu;
for(n=b+1;n<len+1;n++)
{
new_shulie[n]=shulie[n-1];
}
for(k=0;k<len+1;k++)
{
if(k==len){printf("%d",new_shulie[k]);}
else{printf("%d ",new_shulie[k]);}
}
}printf("\n");
}
return 0;
}
2020题
先建立一个数组来储存输入,然后用另一个数组来表示该数组的绝对值数组,然后对绝对值数组用冒泡排列,在改变绝对值数组的顺序时,对原数组也一起进行变化,最后输出原来的数组即可。
#include<stdio.h>
#include <math.h>
int main()
{
int len,i,j,k,m,n,b,t,d;
while(scanf("%d",&len)!=EOF)
{
if(len==0){return 0;}
int shuzu[len],juedui_shuzu[len];
for(j=0;j<len;j++)
{
scanf("%d",&shuzu[j]);
}
for(i=0;i<len;i++)
{
juedui_shuzu[i]=abs(shuzu[i]);
}
for(k=0;k<len;k++)
{
for(m=0;m<len-1;m++)
{
if(juedui_shuzu[m]<juedui_shuzu[m+1])
{
t=juedui_shuzu[m];
juedui_shuzu[m]=juedui_shuzu[m+1];
juedui_shuzu[m+1]=t;
d=shuzu[m];
shuzu[m]=shuzu[m+1];
shuzu[m+1]=d;
}
}
}
for(n=0;n<len-1;n++)
{
printf("%d ",shuzu[n]);
}
printf("%d",shuzu[len-1]);
printf("\n");
}
return 0;
}