iOS-C_Day8___数组练习

2015.1.28

3.给定某个拥有 5 个元素的字符数组,数组的成员都有阿拉伯字符构成,试着将该数

//组转换成一个整数,比如字符数组的内容是:{‘1’,’2’,’3’,’3’,’2’} 则将被转换成 12332。

//处理整形数组

/*int main(int argc, const char * argv[]) {

int a[100];

int cnt=0;

int sum=0;

for (int i=0; i<100; i++) {

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

cnt++;

if (getchar()==‘\n‘) {

break;

}

}

for (int i=0; i<cnt; i++) {

sum = sum*10+a[i];

}

printf("sum = %d\n", sum);

return 0;

}*/

//处理字符数组

#if 0

int main(int argc, const char * argv[]) {

char ch[100];

int cnt=0;

int sum=0;

for (int i=0; i<100; i++) {

scanf("%c", &ch[i]);

if (ch[i]==‘\n‘) {

ch[i]=‘\0‘;

break;

}

cnt++;

}

for (int i=0; i<cnt; i++) {

sum = sum*10+(ch[i]-‘0‘);

}

printf("sum = %d\n", sum);

return 0;

}

#endif

//7.计算某个由英文、数字以及标点符号构成的数组的总宽度,其中英文字符的宽度为

//1cm,数字宽度为 0.5cm、标点符号宽度为 0.8cm。

//8.接上题,如果规定行的宽度为 10cm,将某个字符长度超过 50 的字符串截断,恰好 使 10cm 宽的行能容纳。输出这个被截断的子数组。

#include <string.h>

float judgeChar(char ch)

{

if ((ch>=‘A‘&&ch<=‘Z‘) || (ch>=‘a‘&&ch<=‘z‘)) {

return 1.0;

}

else if(ch>=‘0‘ && ch <= ‘9‘)

{

return 0.5;

}

else

{

return 0.8;

}

}

#if 0

int main(int argc, const char *argv[])

{

char str[100];

float sum =0.00;

scanf("%s", str);

int len = (int)strlen(str);//求字符串有效字符个数,不包含‘\0‘;

for (int i=0; i<len; i++) {

sum+=judgeChar(str[i]);

}

printf("sum = %.2f\n", sum);

return 0;

}

#endif

#if 0

int main(int argc,const char *argv[])

{

char str[100];

scanf("%s",str);

int len = (int)strlen(str);

float sum =0;

for (int i=0; i<len; i++) {

sum+=judgeChar(str[i]);

if (sum>10) {

str[i]=‘\0‘;

break;

}

if (sum==10) {

str[i+1]=‘\0‘;

break;

}

}

printf("str = %s\n", str);

return 0;

}

#endif

//给定一个整型数组,数组的长度为 N(N>3),从数组中寻找一个连续的长度为 3 的子数组,要求该子数组的和最大。

#if 0

int main(int argc, const char *argv[])

{

int a[100];

int cnt=0;

for (int i=0; i<100; i++) {

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

cnt++;

if (getchar()==‘\n‘) {

break;

}

}

int max = a[0]+a[1]+a[2];

for (int i=1; i<cnt-2; i++) {

if (max<a[i]+a[i+1]+a[i+2]) {

max = a[i]+a[i+1]+a[i+2];

}

}

printf("max = %d\n", max);

return 0;

}

#endif

//41.编写函数将一个n*n矩阵转置,例如:(****)

//1 2 3 4     1 5 3 4

//5 6 7 8 ->  2 6 2 7

//3 2 5 9     3 7 5 2

//4 7 2 3     4 8 9 3

//void reverseArr(int *a[], int n)

//{

//

//    return 0;

//}

#if  0

int main(int argc,const char *argv[])

{

int a[4][4]={{1,2,3,4},

{5,6,7,8},

{3,2,5,9},

{4,7,2,3}};

for (int i=0; i<4-1; i++) {

for (int j=i+1; j<4; j++) {

int temp = a[i][j];

a[i][j]=a[j][i];

a[j][i]=temp;

}

}

for (int i=0; i<4; i++) {

for (int j=0; j <4; j++) {

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

}

printf("\n");

}

return 0 ;

}

#endif

//猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

#if  0

int main(int argc,const char *argv[])

{

int a[10]={};

a[9]=1;

for (int i=8; i>=0; i--) {

a[i]=(a[i+1]+1)*2;

}

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

return 0;

}

#endif

//围圈报数

//有m个人围成一圈,顺序排号。从第一个人开始报数(从1到n报数),凡报到m的人退出圈子,问最后留下的是原来第几号的哪位。

//5 3  --> 4

//6 2  --> 5

//0 0 0 4 0

//

#if 0

int main(int argc, const char *argv[])

{

int a[100];

int m, n;

int cnt = 0;//统计退出的人数

scanf("%d %d", &m , &n);

if (m<1||m>100 || n<1) {

return -1;

}

int i=0;

for (i=0; i<m; i++) {//给数组赋值

a[i]=i+1;

}

int k=0;//报数

i = 0;

while (cnt<m-1) {

if(a[i])

{

k++;

if (k==n) {

a[i]=0;

k=0;

cnt++;

}

}

i++;

if (i==m) {//边界处理

i=0;

}

}

for (int i=0; i<m; i++) {

if (a[i]) {

printf("%d", i+1);

}

}

printf("\n");

return 0;

}

#endif

//3.输入十个数,任意相邻的两个数不同,输出所有的递增,递减序列

//比如:

//输入:1 5 9 8 12 21 3 0 -1 9

//输出:

//1 5 9

//9 8

//8 12 21

//21 3 0 -1

//-1 9

//

//输入: 3 9 8 -11 4 21 8 -3 0 2

//输出:

//3 9

//9 8 -11

//-11 4 21

//21 8 -3

//-3 0 2

#if 0

int main(int argc,const char *argv[])

{

int a[10]={};

for (int i=0; i<10; i++) {

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

}

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

for (int i=1; i<9; i++) {

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

if ((a[i]>a[i-1] && a[i]>a[i+1]) || (a[i]<a[i-1] && a[i]<a[i+1])) {

putchar(‘\n‘);

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

}

}

printf("%d\n", a[9]);

return 0;

}

#endif

//2. 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限

//比如:

//输入:5 18

//输出:

//1  2  3  4  5

//16 17 18 0  6

//15 0  0  0  7

//14 0  0  0  8

//13 12 11 10 9

//

//输入: 4 12

//输出:

//1  2  3  4

//12 0  0  5

//11 0  0  6

//10 9  8  7

#if 0

int main(int argc, const char *argv[])

{

int a[20][20]={};

int m,n;

scanf("%d%d", &n,&m);

if (n<1 || m>n*n|| m<0) {

return -1;

}

int s1=n-1, s2=n-1, s3=0, s4=1;//控制边界

int i=0,j=0;//控制二维数组下标

int type=1;//1:从左往右赋值, 2:从上往下赋值,3:从右往左赋值 4: 从下往上赋值

int cnt=1;//表示赋值的数

while (cnt<=m) {

a[i][j]=cnt;//赋值

switch (type) {

case 1://从左往右赋值

if (j==s1) {

type=2;

s1--;

i++;

}

else

{

j++;

}

break;

case 2://从上往下赋值

if (i==s2) {

type =3;

s2--;

j--;

}

else

{

i++;

}

break;

case 3://从右往左赋值

if (j==s3) {

type =4;

s3++;

i--;

}

else

{

j--;

}

break;

case 4://从下往上赋值

if (i==s4) {

type =1;

s4++;

j++;

}

else

{

i--;

}

break;

default:

break;

}

cnt++;

}

for (int i=0; i<n; i++) {

for (int j=0; j<n; j++) {

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

}

printf("\n");

}

return 0;

}

#endif

//4..输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)

//比如:

//输入:1 2 2 3 2 5 5 7 8 9

//输出:2 5

//     1 3 0 1 0 2 0 1 1 1

//  max =2;

// 2 5

//数据结构: 定义一个整型数组 int count[10] 存储每个元素的个数, 开始时每个元素个数初始化为1

//

//算法:

//(1) 利用双层循环, 每一个元素都与后面一个元素比较, 如果两者相同, 则该元素次数+1,

//(2) 以上的算法中两个相同的元素的次数是一样的, 优化如下, 比较两个元素的时候, 如果两者相等, 则该元素次数+1, 后面的元素次数设置为0, 比较的时候再判断这个元素是否已经比较

//

//伪代码:

//

//定义数组保存每个元素次数

//

//使用双层循环遍历数组

//如果当前元素后后面元素相等, 并且后面的元素次数不为0

//当前元素次数+1, 后面的元素次数设置为0

//

//从保存每个元素次数的数组中查找最大的值

#if 0

int main(int argc,const char *argv[])

{

int a[10]={};

int count[10];

for (int i=0; i<10; i++) {

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

}

for (int i=0; i<10; i++) {

count[i]=1;

}

for (int i=0; i<10; i++) {

if (count[i]) {

for (int j=i+1; j<10; j++) {

if (a[i]==a[j] && count[j]) {

count[i]++;

count[j]=0;

}

}

}

}

//    for (int i=0; i<10; i++) {

//        printf("%d ", count[i]);

//    }

//查找count最大值

int max = count[0];

for (int i=1; i<10; i++) {

if (max<count[i]) {

max = count[i];

}

}

//输出出现最多次数的值

for (int i=0; i<10; i++) {

if (max == count[i]) {

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

}

}

printf("\n");

return 0;

}

#endif

//5.魔方阵是一个古老的智力问题,它要求在一个m*m的矩阵中填入1~m^2的数字(m为奇数),使得每一行、每一列、每条对角线的累加和都相等。请编程实现输入m,输出m*m的魔方阵出来。

//比如:

//输入:3

//输出:

//6 1 8

//7 5 3

//2 9 4

//(1)将1放在第一行中间一列;

//(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数减1(例如上面的三阶魔方阵,5在4的上一行后一列);

//(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;

//(4)当上一个数的列数为1时,下一个数的列数应为n,行数减去1。例如2在第3行 第一列,则3应放在第二行最后一列;

//(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

int main(int argc,const char *argv[])

{

int a[19][19]={};

int m;

scanf("%d", &m);

if (!(m%2) || m<3 ||m>19) {

return -1;

}

int i=0,j=m/2;

int cnt =1;

int temi,temj;

while (cnt<=m*m) {

a[i][j]=cnt;

temi = i;//保存上一个数的下标

temj = j;

i--;//变换下标

j--;

if(temi==0)//变换行标

{

i = m-1;

}

if (temj==0)//变换列标

{

j = m-1;

}

if(a[i][j])

{

i = temi+1;

j = temj;

}

cnt++;

}

for (int i=0; i<m; i++) {

for (int j=0; j<m; j++) {

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

}

printf("\n");

}

return 0;

}

时间: 2024-10-16 22:05:40

iOS-C_Day8___数组练习的相关文章

iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方法

关于iOS去除数组中重复数据的几种方法

关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的.代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-

iOS 判断数组是否为空

有人说可以用([array count]==0 )来判断是否为空,都是坑,如果array为空的话,执行count就会直接报错,程序崩溃退出. 正确判断NSArray是否为空的方法:用 (!array) if(array != nil && ![array isKindOfClass:[NSNullclass]] && array.count !=0){ //执行array不为空时的操作 } 这样才是iOS判断数组是否为空的准确方式.

IOS 根据数组的个数对UIButton进行重复或循环使用

//设置一个view view = [[UIView alloc] initWithFrame:CGRectMake(0, 38, 320, 30)]; view.backgroundColor = [UIColor lightGrayColor]; [self.view addSubview:view]; for (int i=0; i<5; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; butt

iOS 查询数组中的对象

通常情况下,根据一个条件在数组中查询出匹配的对象的方式有如下几种: (1)遍历数组,然后将每一个Item和这个条件进行比对,过滤出匹配的对象 显然这个效率比较低 (2)iOS提供另一个效率较高的查询方法,谓词NSPredicate,使用方法如下 C代码 收藏代码 1.NSString 对象 NSArray *array [email protected]["123", @"234" , @"345"]; NSPredicate *predicat

iOS中数组遍历的方法及比較

数组遍历是编码中非经常见的一种需求.我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 由于iOS是兼容C语言的.所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据.尽管还不够模拟大批量的数据.但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方

iOS NSArray数组过滤

//iOS-筛选数组内的元素 //在dataArray中里面,将在dataArray中的并且在filteredArray数组里面的元素过滤掉 //需要去掉的元素数组 NSMutableArray *filteredArray = [[NSMutableArray alloc]initWithObjects:@"1",@"3",@"9", nil]; //需要被筛选的数组 NSMutableArray *dataArray = [[NSMutabl

iOS关于数组的那些小菜菜

//删除数组 [areaArr removeAllObjects]; [industryArr removeAllObjects]; [natureArr removeAllObjects]; 用NSMutableDictionary来保存"名片"记录.那么这一次,我们扩展,并使用NSMutableArray来保存"菜单"信息. 那么,我们将在AddressBook类中加入相关的属性. AddressBook.h 文件中加入: NSMutableArray *_bo

iOS中数组的排序方法

1函数介绍与实例 函数一:- (void)sortUsingSelector:(SEL)comparator; 适用于数组中的元素自带比较函数时: 数组排序函数,调用该函数的对象为数组,comparator是调用该函数的数组中的元素的方法.函数参数类型为数组中的元素类型或者id类型,在调用时不需要传递参数,排序过程不可见,该函数执行时:循环取出各个元素,进行比较,然后放到合适的位置 使用实例: 将数组中的元素按照字符串大小排序: NSMutableArray*array = [[NSMutabl

iOS 5 数组转换成字典形式并且排序,然后删除指定字典让中的内容

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /** * 第1题 请将如下数据存储成字典,并将字典内容以字符串形式输出,输出:"XXX,年龄XXX岁,职业XXX"(将XXX替换为相应的数据). */ NSString *name = @"wangchongyang"; NSInteger age = 56; NS