求集合数据的均方差c语言pta,PAT习题刷题中

1001.3n+1猜想

#include

int main()

{

int n,count=0;

scanf("%d",&n);

while(n)

{

if(n==1) break;

count++;

if(n%2)//奇数

n = (3*n+1)/2;

else

n = n/2;

}

printf("%d",count);

return 0;

}

2-05.求集合数据的均方差

#include

#include

#define MAX 10000

int a[MAX];

int main()

{

int n,i=0;

long long int sum=0;

scanf("%d",&n);

for(i=0;i

{

scanf("%d",&a[i]);

sum += a[i];

}

double add=0.0,avg,temp=0.0,result;

avg = 1.0*sum/n;

for(int i=0;i

{

temp = a[i]-avg;

temp = temp*temp;

add += temp;

}

result = sqrt(add/n);

printf("%.5lf",result);

return 0;

}

1002.写出这个数

#include

#include

char a[200]={0};

char c[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

int main()

{

int i,sum=0,out[900];

scanf("%s",a);

for(i=0;i

sum += a[i]-'0';

i=0;

while(sum)

{

out[i]=sum%10;

sum=sum/10;

i++;

}

for(i=i-1;i>0;i--)

printf("%s ",c[out[i]]);

printf(c[out[0]]);

return 0;

}

1004.成绩排名

#include

#include

#define MAX_NUM 100

char name[MAX_NUM][12],number[MAX_NUM][12];

int main()

{

int i=0,n,max=-1,min=101,score;

int maxindex=0,minindex=0;

scanf("%d",&n);

while(n--)

{

scanf("%s%s%d",name[i],number[i],&score);

//printf("%d",score);

if(score>max) {maxindex = i;max=score;}

if(score

i++;

}

printf("%s %s\n",name[maxindex],number[maxindex]);

printf("%s %s",name[minindex],number[minindex]);

return 0;

}

1005.继续3n+1猜想

无力吐槽中,题目说了n不会超过100,所以对flag操作的时候没有考虑x的范围,因为不会数组越界,结果一直出现两个测试点的段错误..最后加了一句检验数组是否越界的if语句就通过了..

#include

#include

int flag[101]={0};

int x,y[100];

int compare(const void* _a, const void* _b)

{

int* a=(int*) _a;

int* b=(int*) _b;

return *b-*a;

}

int main()

{

int n,i=0;

scanf("%d",&n);

for(i=0;i

{

scanf("%d",&x);

y[i]=x;

if(flag[x]) continue;

while(x)

{

if(x==1) break;

if(x%2) x=(3*x+1)/2;

else x=x/2;

if(x<=100) flag[x]=1;//检查是否数组越界

}

}

flag[1]=0;

int ta=0;

qsort(y,n,sizeof(int),compare);

for(i=0;i

if(!flag[y[i]])

{

if(ta) printf(" ");

else ta=1;

printf("%d",y[i]);

}

return 0;

}

1006.换个格式输出

要注意限定输入x<10000,否则段错误

cnt1,cnt2,cnt3都要先初始化,否则段错误

#include

#include

char word1[10],word2[10],word3[10];

int main()

{

int x,i,cnt1=0,cnt2=0,cnt3=0,count=0;

scanf("%d",&x);

if(x<1000)

{

while(x)

{

count++;

switch(count)

{

case 1:

cnt1=x%10;

for(i=0;i

word1[i]=i+1+'0';

break;

case 2:

cnt2=x%10;

for(i=0;i

word2[i]='S';

break;

case 3:

cnt3=x%10;

for(i=0;i

word3[i]='B';

break;

}

x/=10;

}

}

for(i=0;i

printf("%c",word3[i]);

for(i=0;i

printf("%c",word2[i]);

for(i=0;i

printf("%c",word1[i]);

return 0;

}

1007.素数对猜想

注意素数的函数返回值为int,开根操作需要特别注意。

主循环里j<=x否则答案错误

#include

#include

int is_prime(int x)

{

int i;

int m;

m=floor(sqrt(x)+0.5);

for(i=2;i<=m;i++)

if(x%i==0) return 0;

return 1;

}

int main()

{

int x,i,j,cnt=0;

scanf("%d",&x);

if(x>0)

{

for(i=3,j=5;j<=x;i+=2,j+=2)

{

if(is_prime(i) && is_prime(j))

cnt++;

}

printf("%d",cnt);

}

return 0;

}

1008.数组循环问题

注意要对m求余,否则当m>n时就会出错

#include

#include

int a[120],b[100];

void shift_array(int a[],int n,int m)

{

int i,j;

m = m%n;

for(i=n-m,j=0;i

b[j++]=a[i];

for(i=n-m-1;i>=0;i--)

a[i+m]=a[i];

for(i=0,j=0;i

a[i]=b[j++];

}

int main()

{

int N,M,flag=0;

scanf("%d%d",&N,&M);

int i;

if(N>=1 && N<=100)

{

for(i=0;i

scanf("%d",&a[i]);

}

if(M>=0)

shift_array(a,N,M);

for(i=0;i

{

if(!flag)

{

printf("%d",a[i]);

flag=1;

}

else

printf(" %d",a[i]);

}

return 0;

}

1009.说反话

#include

#include

int main()

{

int i,j=0,k;

char word[100];

char temp[80];

gets(word);

if(strlen(word)<=80)

{

for(i=strlen(word)-1;i>=0;i--)

{

if(word[i]==' ')

{

for(k=j-1;k>=0;k--)

printf("%c",temp[k]);

printf(" ");

j=0;

continue;

}

temp[j++]=word[i];

if(i==0)

{

for(k=j-1;k>=0;k--)

printf("%c",temp[k]);

}

}

}

return 0;

}

1010.一元多项式求导

注意如果第一次输入就是个常数,需要输出0 0...

#include

#include

int main()

{

int n, e, flag = 0;

while (scanf("%d%d", &n, &e) != EOF)

{

if( n*e )

{

if(flag)

printf(" ");

else

flag = 1;

printf("%d %d", n*e, e-1);

}

}

if(!flag) printf("0 0");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值