建立一个数组aa[256],全初始化为0,
2)从头读字符串,每一个是存c中,在相应的aa[c]加1
3)如果aa中的奇数,大于1个,说明不可能是回文数
4)现在就是找最小的交换次数了,也就是把aa中的字每一个拿一半加上哪个奇数减1的一半,来作排列组合,这样最后要的字符串就定下来了,每个字符在这字符串中的号是定下来的,把这个号,和输入的字符串关联起来,来进行冒泡排序 ,如果交换就增加一次交换次数,最后比较所有的排列组合哪个次数最小,就完成
#include stdio.h
int main()
int n,a,b,c;
scanf("%d",n);
if(n100||n999)
printf("Input error!");
else
a=n/100;
b=n/10%10;
c=n%10;
printf("%d",a*a*a+b*b*b+c*c*c);
return 0;
单项选择题(每小题2分,共50分)
1、一个C程序的执行是从___A__。
A、本程序的main函数开始,到main函数结束
B、本程序的main函数开始,到本程序文件的最后一个函数结束
C、本程序文件的之一个函数开始,到本程序文件的最后一个函数结束
D、本程序文件的之一个函数开始,到本程序main函数结束
2、C语言程序的基本单位是___C___。
A、程序行 B、语句
C、函数 D、字符
3、请选出可用作C语言用户标识符的一组标识符___B___。
A、void B、a3_b3 C、For D、2a
define _123 -abc DO
WORD IF ase sizeof
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
以上内容参考:百度百科-c语言
车票根据题意两两站点连线生成,金额和数量分别用随机数。
数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。
购买流程:检查输入数值有效性-检查车票库存-购买成功同步修改用户购买流水及车票库存。(这里题目需求不明确,没有指明用户购买方式),我的代码允许一个用户同时购买多种票,每种票可分批购买多张。购买流水记录自动增加和更新。
退票流程:检查输入和用户购买记录,同步更新用户及车票信息。
删除流程:选择删除没有被用户购买的票(函数检查所有用户,虽然本题只要一个用户,实际传参用户数组首地址)。
PS: 这个题目涉及到增删改,用链表来写更好,但考虑你学习范围,没有使用链表而是动态数组,动态数组删除,考虑内存占用,不仅要需循环移位还要释放多余地址。
另外整体程序,异常的处理我只是单纯返回0或者1或者-1区分基本的成功与失败。你如想对个别异常进行特殊处理,自行修改返回值,接收判断。
下面是代码:
#include stdio.h
#include stdlib.h
#include string.h
#include time.h
#include windows.h
#include conio.h
#define MS 5//更大站点数
typedef struct station
char sid[10];
char sName[20];
}STN;
typedef struct ticket
int tid;//票编号
STN *ssP;//起始站
STN *tsP;//终点站
int value;//票价
int number;//数量
}TKT;
typedef struct userInfo//用户
char uid[20];//身份证号
int cnt;//购买的票种类数量
int *btids;//购买的所有票id数组
int *btNum;//购买的所有票数量数组
}UIFO;
int init(STN stns[MS],TKT **tkts);//初始化车站、票数据
int disAllTickets(TKT *tkts);
int buyTicket(UIFO *uifo,TKT *tkts);//异常返回0
int reTicket(UIFO *uifo,TKT *tkts);//异常返回0
int showMenu(UIFO *uifo,TKT *tkts);
int delIntByIndex(int *nums,int len,int index);//通过下标index删除动态整型数组nums对应元素,并释放多余地址,返回删除后的数组长度,异常返回-1
int delTkts(UIFO *uifos,int len,TKT *tkts);//删除指定票(检查用户组,只要有一个用户购买,无法删除)
int cnt;//票种类数量
int main()
STN stns[MS];
TKT *tkts=NULL;
UIFO uifo={"321002199902050614",0,NULL,NULL};
srand(time(NULL));
cnt=init(stns,tkts);
printf("共生成%d组票(每组往返两种票,共%d种票)\n\n",cnt/2,cnt);
printf("按任意键继续。。。。\n"),getch();
system("cls");
showMenu(uifo,tkts);
return 0;
int showMenu(UIFO *uifo,TKT *tkts)
int n=5;
printf("(1) Buy ticket\n");
printf("(2) Refund ticket\n");
printf("(3) Remove ticket\n");
printf("(4) Display all tickets\n");
printf("(0) Exit\n");
while(n0 || n4)
scanf("%d",n);
switch(n)
case 0: return 0;
case 1: if(!buyTicket(uifo,tkts)) return 0;break;
case 2: if(!reTicket(uifo,tkts)) return 0;break;
case 3: if(!delTkts(uifo,1,tkts)) return 0;break;
//这里删除功能,用户多名,要传数组首地址,由于演示只有一个用户(len=对应用户数),所以只传该用户地址(len=1)
case 4: disAllTickets(tkts);break;
showMenu(uifo,tkts);
return 1;
int disAllTickets(TKT *tkts)
int i;
for(i=0;icnt;i++)
printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);
printf("按任意键继续。。。。\n"),getch();
system("cls");
return 1;
int delIntByIndex(int *nums,int len,int index)
int i,*temp=NULL;
if(indexlen-1) return -1;
for(i=index;ilen-1;i++)
nums[i]=nums[i+1];
len--;
if(len)
temp=(int *)realloc(nums,sizeof(int)*len);
if(!temp) return -1;
nums=temp;
else
free(nums);
return len;
int reTicket(UIFO *uifo,TKT *tkts)
int i,j,tid,n,index,len,flag=0;
printf("当前用户购买记录:\n");
for(i=0;iuifo-cnt;i++)
for(j=0;jcnt;j++)
if(tkts[j].tid==uifo-btids[i]) index=j;
printf("--车票编号:%d,起末站:%s-%s,购买票数:%d\n",uifo-btids[i],tkts[index].ssP-sName,tkts[index].tsP-sName,uifo-btNum[i]);
printf("请输入要退票的车票id及票数:"),scanf("%d%d",tid,n);
for(i=0;iuifo-cnt;i++)
if(uifo-btids[i]==tid uifo-btNum[i]=n)
for(j=0;jcnt;j++)
if(tkts[j].tid==uifo-btids[i]) tkts[j].number+=n;//同步修改对应车票剩余票数
uifo-btNum[i]-=n;//用户购买记录修改
if(uifo-btNum[i]==0)//某种车票全部退完,删除该条记录
len=delIntByIndex(uifo-btNum,uifo-cnt,i);
if(len==-1) return 0;
len=delIntByIndex(uifo-btids,uifo-cnt,i);
if(len==-1) return 0;
uifo-cnt=len;
flag=1;
break;
if(flag)
printf("退票成功!\n");
else
printf("无此购买记录或输入数量不符合\n");
printf("按任意键继续。。。。\n"),getch();
system("cls");
return 1;
int buyTicket(UIFO *uifo,TKT *tkts)
char spn[20],tpn[20];
int i,n=-1,index=-1,*temp=NULL;
for(i=0;icnt;i++)
printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);
printf("请输入始发站站名和终点站站名:"),scanf("%s%s",spn,tpn);
for(i=0;icnt;i++)
if(strcmp(tkts[i].ssP-sName,spn)==0 strcmp(tkts[i].tsP-sName,tpn)==0)
printf("车票%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);
index=i;
break;
if(index==-1)
printf("购买失败!无此路程的车票\n");
else
while(n=0)
printf("请输入要购买的数量(大于0):"),scanf("%d",n);
if(tkts[index].numbern)
printf("错误:车票数量不足或者输入数值超出范围!请重新输入!\n"),n=-1;
for(i=0;iuifo-cnt;i++)//检查用户购买记录,重复票累加购买数量,不同票新增记录
if(uifo-btids[i]==tkts[index].tid)
printf("该票已购买了%d张,现再次购买%d张,累计购买了%d张\n",uifo-btNum[i],n,uifo-btNum[i]+n);
uifo-btNum[i]+=n;
tkts[index].number-=n;
break;
if(i==uifo-cnt)//未检查到重复记录,新增
if(!uifo-btids)
uifo-btids=(int *)malloc(sizeof(int));
if(!uifo-btids) return 0;
uifo-btNum=(int *)malloc(sizeof(int));
if(!uifo-btNum) return 0;
else
temp=(int *)realloc(uifo-btids,sizeof(int)*(uifo-cnt+1));
if(!temp) return 0;
uifo-btids=temp;
temp=(int *)realloc(uifo-btNum,sizeof(int)*(uifo-cnt+1));
if(!temp) return 0;
uifo-btNum=temp;
uifo-btids[uifo-cnt]=tkts[index].tid;
printf("该票购买了%d张\n",(uifo-btNum[uifo-cnt]=n));
tkts[index].number-=n;
uifo-cnt++;
printf("用户购买记录:\n");
for(i=0;iuifo-cnt;i++)
printf("--车票编号:%d,购买票数:%d\n",uifo-btids[i],uifo-btNum[i]);
printf("本次成功购买了%s-%s的票%d张!\n",tkts[index].ssP-sName,tkts[index].tsP-sName,n);
printf("按任意键继续。。。。\n"),getch();
system("cls");
return 1;
int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有购买的用户数量
int i,j,k,tid,flag=0,index;
for(i=0;icnt;i++)
printf("编号:%2d 路程:%s-%s 票价:%3d 剩余票数:%d\n",tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);
printf("请输入要删除的车票编号:"),scanf("%d",tid);
for(i=0;icnt;i++)
if(tid==tkts[i].tid)
index=i;
flag=1;
for(j=0;jlen;j++)//检查所有用户购买记录
for(k=0;kuifos[j].cnt;k++)
if(uifos[j].btids[k]==tid)
flag=0;
printf("该票已被用户购买,无法删除,需先完成退票!\n");
break;
if(!flag)
break;
break;
if(!flag) printf(" 删除失败,输入数值超出范围或不可删除!\n");
else
cnt--;
if(cnt==0)
free(tkts[index].ssP);
free(tkts[index].tsP);
free(tkts[index]);
else
free(tkts[index].ssP);
free(tkts[index].tsP);
for(i=index;icnt;i++)
tkts[i]=tkts[i+1];
tkts[cnt].ssP=NULL;
tkts[cnt].tsP=NULL;
free(tkts[cnt]);
printf(" 删除成功!\n");
printf("按任意键继续。。。。\n"),getch();
system("cls");
return 1;
int init(STN stns[MS],TKT **tkts)
TKT *tTemp=NULL;
int i,j,n,v,cnt=2;
static int id=1;
printf("生成站点:\n");
for(i=0;iMS;i++,id++)
sprintf(stns[i].sid,"车站%03d",id);
sprintf(stns[i].sName,"SN%03d",id);
printf("----站点名:%s。站点ID:%s\n",stns[i].sid,stns[i].sName);
printf("计算所有站点连线,生成车票(票是往返,所以一次生成往返两组票):\n");
for(i=0;iMS;i++)
for(j=i+1;jMS;j++)
if(!(*tkts))
*tkts=(TKT *)malloc(sizeof(TKT)*2);
if(!(*tkts)) return -1;
else
tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);
if(!tTemp) return -1;
*tkts=tTemp;
n=rand()%4+2;//每种票随机2~5张(保证总数大于20)
v=rand()%201+50;//随机生成票价50~250
(*tkts)[cnt-1].tid=cnt;
(*tkts)[cnt-1].ssP=stns[i];
(*tkts)[cnt-1].tsP=stns[j];
(*tkts)[cnt-1].value=v;
(*tkts)[cnt-1].number=n;
(*tkts)[cnt-2].tid=cnt-1;
(*tkts)[cnt-2].ssP=stns[j];
(*tkts)[cnt-2].tsP=stns[i];
(*tkts)[cnt-2].value=v;
(*tkts)[cnt-2].number=n;
printf("----%s和%s的之间往返票各生成%d张,票价为%d(随机)\n",stns[i].sName,stns[j].sName,n,v);
cnt+=2;
return cnt-2;
//答题不易,如采纳的,请不要无故删除问题。
正在红旗年夜 楼列队 购支音机 http://www.sina.com.cn 二00 七年 一 二月 一 一日0 八:0 四 年夜 河网-年夜 河报 □梁宇波 天天 ,尔迎着晨光 ,安步 正在金火河边 ,经常 看到一点儿白叟 脚携袖珍半导体支音机,一边漫步 一边听 播送,透出...
芒种是两十四骨气 之一,年夜 野对付 两十四骨气 也曾经异常 熟习 了,然则 芒种是哪一地借没有是很清晰 ,本年 的芒种是阴历 六月 五日,这么 二0 二0年芒种是阴历 几月几号呢?交高去咱们便一路 相识 一高吧。 ...
军事人材网宣布 通知布告 称, 二0 一 九年三军 里背社会公然 雇用 文职职员 一 九 五 三 二人,这么军职文职职员 待逢若何 ?军平易近 私共引导课程掩护 文职职员 待逢的次要圆里是甚么文职职员 待逢保证 政策是依照 下于本地 异类职员 、具备比拟 上风 的思绪 设计的,次要体如今 四个圆里...
纸弛构造 出有流动的样式。分歧 类型的纸弛有分歧 的纸弛构造 。否如下载一点儿他人 写的论文看看,如许 便否以 晓得论文构造 是甚么样的了。您否以依照 上面隐示的要领 登录云门户,正在外国知网上收费高载论文。CNKI论文否以避免费高载,各类 论文皆有。随意 注册一个用户便否以登录高载胜利 。纸弛构造...
二00 七年 八月 三0日0 九: 二 七南边 都会 报四十本质 情故事,续 对于制止 !消息 出书 总署 请求宽查,名双上的故事各年夜 搜刮 引擎未全体 启杀乌名双江湖阳娘红楼受偶罗兵阳川妇妻天国 阿利布达年谱爱神坏的传奇一个奼女的日志 伸创做之子的口路行程西南成生父性的渺茫 妖素奼女海窃的戚忙...
全体 睁开 要领 是:以安卓脚机操做为例: 一.起首 挨谢脚机微疑,入进微疑尾页,点击页里底部的“discover”,入进微疑领现页里。 二.入进微疑领现页里后,点击“同伙 圈”栏入进微疑同伙 圈页里。 三.入进同伙 圈静态页里后,点击页里左上角的图标,以下图所示,页里上会涌现 响应 的操做功效 选...