C语言middleWord文档格式.docx

上传人:b****1 文档编号:4909217 上传时间:2023-05-04 格式:DOCX 页数:96 大小:37.12KB
下载 相关 举报
C语言middleWord文档格式.docx_第1页
第1页 / 共96页
C语言middleWord文档格式.docx_第2页
第2页 / 共96页
C语言middleWord文档格式.docx_第3页
第3页 / 共96页
C语言middleWord文档格式.docx_第4页
第4页 / 共96页
C语言middleWord文档格式.docx_第5页
第5页 / 共96页
C语言middleWord文档格式.docx_第6页
第6页 / 共96页
C语言middleWord文档格式.docx_第7页
第7页 / 共96页
C语言middleWord文档格式.docx_第8页
第8页 / 共96页
C语言middleWord文档格式.docx_第9页
第9页 / 共96页
C语言middleWord文档格式.docx_第10页
第10页 / 共96页
C语言middleWord文档格式.docx_第11页
第11页 / 共96页
C语言middleWord文档格式.docx_第12页
第12页 / 共96页
C语言middleWord文档格式.docx_第13页
第13页 / 共96页
C语言middleWord文档格式.docx_第14页
第14页 / 共96页
C语言middleWord文档格式.docx_第15页
第15页 / 共96页
C语言middleWord文档格式.docx_第16页
第16页 / 共96页
C语言middleWord文档格式.docx_第17页
第17页 / 共96页
C语言middleWord文档格式.docx_第18页
第18页 / 共96页
C语言middleWord文档格式.docx_第19页
第19页 / 共96页
C语言middleWord文档格式.docx_第20页
第20页 / 共96页
亲,该文档总共96页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言middleWord文档格式.docx

《C语言middleWord文档格式.docx》由会员分享,可在线阅读,更多相关《C语言middleWord文档格式.docx(96页珍藏版)》请在冰点文库上搜索。

C语言middleWord文档格式.docx

while(scanf("

%d"

&

n)==1)

solve(n);

return0;

方法2:

c=n-a-b;

//保证a+b+c=n

if(c>

b)//保证了c与b、a不会相同

if(isTriangle(a,b,c))

sum++;

else

break;

Problem2纯粹素数

#include<

string.h>

stdlib.h>

#defineMINM1013//1013是第一个大于1000的纯粹素数

#defineMAXN20//n的最大取值

#defineMAXD10

chardigit[MAXD+1];

intpureprime[MAXN+1];

intisPrime(inti)//判断参数i是否是素数

intj,m=sqrt(i*1.0);

if(i<

2)return0;

for(j=2;

j<

=m;

j++)

if(i%j==0)

return1;

intisPurePrime(intm)//判断参数m是否是纯素数

inti,len;

sprintf(digit,"

m);

//整数m转换成字符串保存在digit中

len=strlen(digit);

for(i=0;

i<

len;

i++)

if((digit[i]!

='

0'

)&

(isPrime(atoi(digit+i))==0))//atoi()将数字字符串转换成整数

voidinitialize()

inti;

intn=0;

for(i=MINM;

n<

MAXN;

i+=2)//只需处理奇数

if(isPurePrime(i))

pureprime[++n]=i;

initialize();

while(scanf("

&

n)!

=EOF)

pureprime[n]);

Problem3纯粹合数

#defineMINM100

#defineMAXN100//最多需要计算100个合数

intpureComposite[MAXN+1];

intcount;

intisComposite(intm)//判断参数m是否是合数

for(i=2;

i*i<

i++)

if(m%i==0)

intisPureComposite(intm)//判断参数m是否是纯合数

inti,len,num;

i<

num=atoi(digit+i);

//atoi()将数字字符串转换成整数

if(num&

isComposite(num)==0)

count=0;

count<

if(isPureComposite(i))

pureComposite[++count]=i;

pureComposite[n]);

Problem4求数列项

//p[1]=1,p[i]=p[i-1]+(i-1)*3+1

intmain()

inti,n;

intindex=1,delta=4;

intp[51];

p[1]=index;

for(i=2;

=50;

i++)

index+=delta;

delta+=3;

p[i]=index;

n)==1)

p[n]);

Problem5最高频率

intn,num,i;

inthash[110];

//hash[i]代表数i出现的次数,i的范围[1,109]。

intmax;

//存放最多次数

intvalue;

//出现最多次数的那个数

for(i=0;

110;

hash[i]=0;

max=0;

value=1;

for(i=0;

scanf("

num);

hash[num]++;

//num出现的次数加1

if(hash[num]==max&

num<

value)//当前数出现次数与max相同,并且当前数更小

value=num;

elseif(hash[num]>

max)//当前数出现次数>

max

max=hash[num];

}

printf("

value);

return0;

Problem6按要求输出序列

/*方法1:

读所有数据;

排序;

删除重复数据。

考虑到数据的值都在[0,109]范围,所以定义数组hash[110],元素值为0或1。

hash[num]的值为0时表示数num未出现过;

1表示数num已出现过。

循环读入一个num,设置hash[num];

最后输出时,当hash[num]值为1时,输出num。

下面是对应方法2的代码。

*/

#defineMAX110

//存放数的个数

intnum;

//存放读入的某个数

charhash[MAX];

//hash[num]的值为0时表示数num未出现过;

1表示数num已出现过

intfirst,i;

memset(hash,0,sizeof(hash));

hash[num]=1;

first=1;

//表示是否是第一个数

MAX;

if(hash[i]==1)

if(!

first)

"

);

i);

first=0;

\n"

Problem7特殊四位数

math.h>

voidtoArray(intn,int*p)//将参数n的各位数字分离到p指向的数组中

intcnt=0;

while(n)

p[cnt++]=n%10;

//分离最低位数字

n/=10;

//缩小10倍

intyes(intn)//判断n的千位数字与十位数字之和是否等于百位数字与个位数字之积

intarray[5];

//array[0]存放个位,...,array[3]存放千位

toArray(n,array);

if(array[3]+array[1]==array[2]*array[0])

intsqrtTest(intn)//判断n是否是某一个自然数的平方

intt=(int)sqrt((double)n);

if(t*t==n)

intn,i;

inta[3];

//符合条件的数只有3个

i=0;

for(n=1000;

10000;

n++)

if(yes(n)&

sqrtTest(n))

a[i++]=n;

a[n-1]);

Problem8找到最大数

voidswap(int*a,int*b)

inttemp=*a;

*a=*b;

*b=temp;

intn,array[1201];

//数的个数不超过1200个

intmax,pos;

n)==1&

n)

scanf("

array);

//读入第1个数据

max=array[0];

pos=0;

for(i=1;

array+i);

//读入数据到array[i]

if(array[i]>

max)

max=array[i];

pos=i;

swap(array,array+pos);

//第1个数和最大数交换

n-1;

i++)

printf("

%d"

array[i]);

Problem9螺旋方阵

版本1:

递归

#defineN10

intp[N][N];

/*对size*size的方阵按顺时针方向填数,填写最外层,从第begin行第begin列开始填写,开始数为number*/

voidFill(intnumber,intbegin,intsize)

if(size==0)//size为偶数时的结束条件

return;

if(size==1)//size为奇数时的结束条件

p[begin][begin]=number;

inti=0;

inth=begin,v=begin;

p[h][v]=number;

number++;

size-1;

i++)//往右

v++;

i++)//往下

h++;

i++)//往左

v--;

size-2;

i++)//往上

h--;

Fill(number,h,size-2);

//递归填写中心区域,从第h行第h列开始填写,开始数为number

}

intmain(void)

intr=0;

while(scanf("

&

n)==1)

if(r!

=0)printf("

Fill(1,0,n);

//填写n*n阶螺旋方阵的最外层,从第0行第0列开始填写,开始数为1

inth,v;

for(h=0;

h<

h++)

for(v=0;

v<

v++)

p[h][v]);

p[h][n-1]);

r++;

版本2:

非递归

intr;

voidfun(intn)//构造n阶螺旋方阵

intnum=n*n;

inti,j;

intdirection=0;

intround=0;

intkey=1;

int**a=(int**)malloc(sizeof(int)*n);

//给数组a行方向动态分配空间

i++)//给数组a列方向动态分配空间

a[i]=(int*)malloc(sizeof(int)*n);

i=0;

j=0;

while(key<

=num)//螺旋方阵构造过程:

从左到右,从上到下,从右到左,从下到上

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

switch(direction%4)

case0:

//从左到右

if(j<

n-1-round)j++;

elseif(j==n-1-round)//到达最右

i++;

direction++;

case1:

//从上到下

n-1-round)i++;

elseif(i==n-1-round)//到达最下

j--;

case2:

//从右到左

if(j>

round)j--;

elseif(j==round)//到达最左

i--;

case3:

//从下到上

if(i>

round+1)i--;

elseif(i==round+1)//到达最上

j++;

round++;

//完成1圈

}

if(r!

=0)printf("

i++)//输出

for(j=0;

a[i][j]);

i++)

free(a[i]);

//释放空间

free(a);

//释放空间

{

r=0;

fun(n);

Problem10阵列

/*

设计思路:

1.先定义一个按规则构造好的10*10的数组s,定义一个10*10的数组t;

2.读入n,将数组t用0值初始化,将数组s中符合规则的数复制到数组t中,数组t中非0元素需要输出,0元素无需输出;

3.确定数组t中输出的开始行、结束行、开始列、结束列;

4.输出非0元素。

voidoutput2(int*p)//按2位宽度输出

if(*p!

=0)

%2d"

*p);

//左侧的0元素输出

voidoutput1(int*p)//按1位宽度输出

%1d"

intn,i,j,r1=0,r2=0;

ints[10][10]={73,72,71,70,69,68,67,66,65,100,

74,43,42,41,40,39,38,37,64,99,

75,44,21,20,19,18,17,36,63,98,

76,45,22,7,6,5,16,35,62,97,

77,46,23,8,1,4,15,34,61,96,

78,47,24,9,2,3,14,33,60,95,

79,48,25,10,11,12,13,32,59,94,

80,49,26,27,28,29,30,31,58,93,

81,50,51,52,53,54,55,56,57,92,

82,83,84,85,86,87,88,89,90,91};

intt[10][10];

introwBegin=0,rowEnd=0;

intcolumnBegin=0,columnEnd=0;

intcount,sum;

if(r1!

r1++;

memset(t,0,sizeof(t));

=9;

j<

j++)

if(s[i][j]<

=n)t[i][j]=s[i][j];

//统计有多少行需要输出

sum=0;

//存放第i行元素的和

sum+=t[i][j];

if(sum!

if(count==0)

rowBegin=i;

//记录需要输出的开始行

count++;

rowEnd=rowBegin+count-1;

//记录需要输出的结束行

//统计有多少列需要输出

//存放第j列元素的和

columnBegin=j;

//记录需要输出的开始列

columnEnd=columnBegin+count-1;

//记录需要输出的结束列

for(i=rowBegin;

=rowEnd;

intflag=1;

//右侧0元素出现时,置flag为0

r2=0;

for(j=columnBegin;

=columnEnd&

flag;

if(t[i][j]==0&

j!

=columnBegin)//右侧0元素出现

flag=0;

if(flag)//非0元素输出

if(r2!

r2++;

if(n<

10)

output1(&

t[i][j]);

if(n==10)

if(j==columnBegin)

output2(&

if(n==11)

if(j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2