您的位置:首页 > 其它

career_cup

2013-06-05 09:46 302 查看
[1]反转字符串

#include "stdafx.h"

void reverse(char *str) {

char *end =str;

char tmp;

if(str){

while(*end){

end++;

}

end--;

while(str<end){

tmp= *str;

*str++=*end;

*end--=tmp;

}

}

}

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

{

char testStr[10] = "abcdefg";

reverse(testStr);

printf("%s\n",testStr);

return 0;

}



[2]将字符数组相同的字符去掉



public class CharDemo1{

public static void main(String args[]){

String str1 = "abcdabfh";

char testStr[] = str1.toCharArray();

removeDuplicates(testStr);

for(int i=0;i<testStr.length;i++){

System.out.print(testStr[i]);

}

}

public static void removeDuplicates(char[] str) {

if (str == null) return;

int len = str.length;

if (len < 2) return;

int tail = 1;

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

int j;

for (j = 0; j < tail; j++) {

if (str[i] == str[j]) break;

}

if (j == tail) {

str[tail] = str[i];

tail++;

}

}

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

str[i] = 0;

}



}

}

输出:abcdfh



[3]获取当前时间

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

#include <string.h>

#include <time.h>

#include <windows.h>

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

{

FILE *fp;

int line = 0;

char buf[Num];

if((fp=fopen("d:/time.txt","a"))==NULL){

fprintf(stderr,"don't fopen %s=\n",strerror(errno));

return -1;

}



while(fgets(buf,Num,fp)!=NULL){

if(strlen(buf)<Num-1 ||buf[Num-2]!='\n')

line++;

}

while(1)

{

time_t t;

time(&t);

struct tm *t1;

t1 = localtime(&t);

sprintf(buf,"%d,%d,%d,%d,%d,%d,%d\n",++line,t1->tm_year+1900,

t1->tm_mon,t1->tm_mday,t1->tm_hour,t1->tm_min,t1->tm_sec);

printf("the current time is =%s\n",buf);

fputs(buf,fp);

fflush(fp);

Sleep(1);

}

fclose(fp);

return 0;

}



[4]

int a=10;

int b;

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

{

int i;

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

printf("&i=%d\n",&i);

for(i=0;i<a;i++)

b+=3*i;

for(i=0;i<10;i++,a++)

{

;

}

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

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

return 0;

}



[5]

int foo()

{

int a =0;

a=strlen("aaabbbccc")-10;

return a;

}

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

{

unsigned char a =foo();

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

return 0;

}

a =255



[6]

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

{

unsigned char a = -1;

unsigned char b = 257;

unsigned char c = (a*b+4)/2;

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

return 0;

}

c=129



[7]

#define FREE(p) free(p);\

p = NULL;

void freeFunc(char *p)

{

free(p);

p=NULL;

}

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

{

char * buf = (char *)malloc(100);

freeFunc(buf);

//FREE(buf);

return 0;

}

freeFunc(char *p)这种方法只能释放内存,但buf并不会=NULL;并不能做到无残留

而FREE(p)则可以。



[8]

#define FREE(p) free(p);\

p = NULL;

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

{

int tag=2;

int i;

char * buf = (char *)malloc(100);

if(tag==3)

FREE(buf);

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

{

buf[i]=2*i+'a';



}

buf[i]=0;

printf("buf is %s\n",buf);

return 0;

}

这段程序会崩溃



[9]

#include "stdafx.h"

#include<iostream.h>

#include<string.h>

#include <malloc.h>

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

#define F_MM(f, m, n) \

{ \

(f), \

(m), \

~((n)-(m)) * !!(n), \

~(n),\

}

struct clk_freq_tbl {

unsigned long freq_hz;

int m_val;

int n_val;

int d_val;

};

static struct clk_freq_tbl ftbl_csi0_1_clk[] = {



F_MM(100000000, 1, 5),

//F_END,

};



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

{

printf("freq is =%d,m_val is =%d,n_val is =%d,d_val is =%d\n",ftbl_csi0_1_clk[0].freq_hz,ftbl_csi0_1_clk[0].m_val,\

ftbl_csi0_1_clk[0].n_val,ftbl_csi0_1_clk[0].d_val);

return 0;

}



[10]

转载请注明出处:/article/1378883.html

题目:

You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that
adds the two numbers and returns the sum as a linked list.

EXAMPLE

Input: (3 -> 1 -> 5), (5 -> 9 -> 2)

Output: 8 -> 0 -> 8

翻译:

用单链表表示一个正整数,每个结点代表其中的一位数字,逆序排列,个位位于表头,最高位位于表尾,将两个数相加并返回结果,结果也由链表表示。

例如:

输入:(3 -> 1 -> 5)+(5 -> 9 -> 2)

输出:8 -> 0 -> 8

思路:

这道题目不难,也没有太大的技巧性,就按照最常规的思路来,只是要注意将所有的情况全部考虑到。

1、两个链表中有一个为NULL,这时直接返回另一个链表就行了;

2、如果两个链表都为空,这本身也包含在第1种情况中包;

3、如果两个链表长度不等,我们需要将二者相加后的结果保存在较长的链表上;

4、如果某位相加大于等于10,需要进位;

5、如果相加后的链表长度大于另两个链表中最长的那个链表的长度,则需要开辟新的节点,将其挂在长度较长的那个链表的表尾。

实际上该题目也为我们提供了一种实现大数相加的思路。

实现代码:

#include <stdio.h>

#include <stdlib.h>

#define bool int

#define true 1

#define false 0

typedef struct Node

{

int data;

struct Node *pNext;

}NODE,*PNODE;



PNODE create_list();

void traverse_list(PNODE);

bool lct_empty(PNODE);

int length_list(PNODE);

void clear_list(PNODE);

PNODE addList(PNODE,PNODE);

void AddShortToLong(PNODE,PNODE);



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

{

int c;

printf("Create the first list:\n");

PNODE pHead1 = create_list();

printf("List 1:\n");

traverse_list(pHead1);



//fflush(stdin); //刷新输入缓冲区

while((c=getchar())!='\n'&&c!=EOF);

printf("Create the second list:\n");

PNODE pHead2 = create_list();

printf("List 2:\n");

traverse_list(pHead2);



PNODE pHead = addList(pHead1,pHead2);

printf("After added,the new List:\n");

traverse_list(pHead);



return 0;

}



/*

创建一个链表,并返回头指针

*/

PNODE create_list()

{

int val;

PNODE pHead =(PNODE)malloc(sizeof(NODE));

PNODE pCurrent = pHead;

pCurrent->pNext = NULL;

if(NULL == pHead)

{

printf("pHead malloc failed!");

exit(-1);

}

printf("Input first data(q to quit):");

while(scanf("%d",&val)==1)

{

PNODE pNew = (PNODE)malloc(sizeof(NODE));

if(NULL == pNew)

{

printf("pNew malloc failed!");

exit(-1);

}

pNew->data = val;

pCurrent->pNext = pNew;

pNew->pNext = NULL;

pCurrent = pNew;

printf("Input next data(q to quit):");

}



return pHead;

}



/*

遍历链表

*/

void traverse_list(PNODE pHead)

{

PNODE pCurrent = pHead->pNext;

printf("now dataes in the list are:\n");

while(pCurrent != NULL)

{

printf("%d ",pCurrent->data);

pCurrent = pCurrent->pNext;

}

printf("\n");

return;

}



/*

判断链表是否为空

*/

bool lct_empty(PNODE pNode)

{

if(NULL == pNode->pNext)

return true;

else

return false;

}



/*

求链表长度,即节点总数(不计入头节点)

*/

int length_list(PNODE pNode)

{

int count = 0;

PNODE pCurrent = pNode->pNext;

while(pCurrent != NULL)

{

count++;

pCurrent = pCurrent->pNext;

}



return count;

}





/*

清空链表,即使链表只剩下头节点(头节点中没有数据)

*/

void clear_list(PNODE pHead)

{

PNODE p = pHead->pNext;

PNODE r = NULL;

while(p != NULL)

{

r = p->pNext;

free(p);

p = r;

}

pHead->pNext = NULL;

return ;

}



/*

两个链表相加

*/

PNODE addList(PNODE pHead1,PNODE pHead2)

{

if(!pHead1)

return pHead2;

if(!pHead2)

return pHead1;



int len1 = length_list(pHead1);

int len2 = length_list(pHead2);

if(len1 >= len2)

{

AddShortToLong(pHead1,pHead2);

return pHead1;

}

else

{

AddShortToLong(pHead2,pHead1);

return pHead2;

}

}

/*

第一个链表的长度大于或等于第二个链表的长度,

将第二个链表加到第一个链表上

*/

void AddShortToLong(PNODE pHeadLong,PNODE pHeadShort)

{

PNODE p1 = pHeadLong->pNext;

PNODE p2 = pHeadShort->pNext;



while(p1 && p2)

{

p1->data = p1->data + p2->data;

if(p1->data >= 10)

{

p1->data -= 10;

if(p1->pNext)

{

p1->pNext->data++;

if(p1->pNext->data >= 10) //两链表长度不同,最后一位又有进位

{

p1->pNext->data -= 10;

PNODE pNew = (PNODE)malloc(sizeof(NODE));

if(!pNew)

{

printf("malloc failed\n");

exit(-1);

}

pNew->pNext = NULL;

pNew->data = 1;

p1->pNext->pNext = pNew;

}

}

else //两链表长度相同,且组后一位有进位

{

PNODE pNew = (PNODE)malloc(sizeof(NODE));

if(!pNew)

{

printf("malloc failed\n");

exit(-1);

}

pNew->pNext = NULL;

pNew->data = 1;

p1->pNext = pNew;

}

}

p1 = p1->pNext;

p2 = p2->pNext;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: