c 指针 及其位运算循环移动拔河比赛问题代码
week_2_day1_7.7 周一
//用字符数组 来实现 字母大小写转换
#include<stdio.h>
void desc( char *a ,int n)
{
char *i = a;
int x = 0 ;
for ( x = 0; x < n ;x ++ )
{
if ( *i >= 97 )
*i-=32;
i++;
}
}
int main(void)
{
void desc(char *num, int n);//必须在函数内部声明
char num[100], a;
int i = 0, k = 0;
while((a = getchar ())!= '\n'){
num[i] = a;
i++;
}
desc(num,i);
for (k = 0; k < i; k ++) {
printf("%c",num[k]);
}
return 0;
}
//大数字加法
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a[1001] = {},b[1001] = {} , c[1001] = {} ;
int i , j= 0 , k1 = 0 ,k2 = 0 ,count1 = 0 , count2 = 0;
char ch , ch1 = '0';
for (i = 1; (ch = getchar()) != ' ' ; i ++) {
j = ch - ch1;
a[i] = j;
}//第一个大数字
k1 =i - 1;
for (i = 1; (ch = getchar()) != '\n' ; i ++) {
j = ch - ch1;
b[i] = j;
}//第二个大数字
k2 = i - 1 ;
if (k1 > k2) {
count1 = k1;
count2 = k2;
}
else{ count1 = k2;
count2 = k1;
}
for ( i = count1 ; i > 0 ; i --,k1 --, k2 -- ) {//加法
if (k2 <= 0)
c[i] += a[k1];//判断是否 那个比较小的数字 是否已经加完
else if ( k1 <= 0)
c[i] += a[k2];
else{
c[i] += (a[k1] + b[k2]);
if (c[i] > 9)
{
c[i] %= 10;
c[i-1] = 1;//是否进位
}
}
}
if (c[0] == 1)
printf("%d",c[0]);
for ( i = 1 ; i <= count1 ; i ++ )
printf("%d",c[i]);
printf("\n");
return 0;
}
//n!的位数 暂时不是太懂
#include <stdio.h>
#include <math.h>
int factorial(int n)
{
long a[10000];
int i,j,c,m=0,w,l = 0;
a[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;
c=a[j]/10000;
a[j]=a[j]%10000;
}
if(c>0) {m++;a[m]=c;}
}
w=m*4+log10(a[m])+1;
// printf("\n%ld",a[m]);
// for(i=m-1;i>=0;i--)
// printf("%4.4ld\n",a[i]);
return w;
}
int main(int argc, const char * argv[])
{
int x;
scanf("%d",&x);
x=factorial(x);
printf("%d",x);
return 0;
}
//拔河比赛分配方案
//就是用随机函数确定那个人 在那一队,然后比较那一队和总体重相差小,就输出他。
#include<stdio.h>
#include <stdlib.h>
#include <sys/_types/_mode_t.h>
int swap(int *a, int j);
int swap(int *a , int j)
{
int min = 0, b ,s = 0 , sum = 0;
int c[100] = {};
for ( int i = 0; i < j ; i ++ ) {
sum += a[i];
}//总人数的 体重
printf("总体重:%d\n",sum);
for ( int h = 0; h < j; h ++)
{
c[h] = -1;
}
for ( int i = 0; i < 10000; i ++)
{
for ( int n = 0; n < j/2; n ++)
{
AA:
b = abs(arc4random()%(j));
for ( int h = 0; h < n; h ++)
{
if (c[h] == b)
{
goto AA;
}
}
c[n] = b;
s += a[b];
}
for ( int h = 0; h < j; h ++)
{
c[h] = -1;
}//重置 保存的 已经有用的数据
if (abs(sum/2 - min) > abs(sum/2 - s) ) {
min = s ;
}
s = 0;
}
return min;
}
int main(void)
{
int a ,ch[100],sum = 0 ;
printf("请输入拔河比赛的总人数:");
scanf("%d",&a);
for ( int i =0; i < a; i ++)
{
printf("请输入第%d个人:",i+1);
scanf("%d",&ch[i]);
}
int min = swap(ch, a);
for ( int i = 0; i < a ; i ++ ) {
sum += ch[i];
}
printf("比较轻的队伍:%d\n",min);
printf("比较重的队伍:%d\n",sum-min);
//printf("%d\n",a, j);
return 0 ;
}
//将n向右循环a位 然后输出
#include <stdio.h>
int ch[32] = {} , ch_l[32] = {};
void printfArry( int *a , int b);//输出数组
int * del_num( long a);//分解数字为2进制 存进数组
int * Toright( int * p, int m);//向右移动
int To_arry_num( int k);//每个数组应该加的2的k次幂
int To_sum( int *p ,int h);//最后输出的 转换后的 数字
void printfArry( int *a , int b){
int i = 0 ;
for ( i = 0 ; i < b; i ++) {
printf("%d\t",a[i]);
}
}
int * del_num( long a){
int i = 0;
for ( i = 0; a > 0; i ++ )
{
if ( a %2 == 0) {
ch[ 31 - i] = 0;
}
else{
ch[ 31 - i] = 1;
}
a /= 2 ;
}
return ch ;
}
int * Toright( int * p, int m)
{
int i = 0 , k = 31 , j ;
for ( i = 31- m; i >=0; k-- ,i --)
{
ch_l[k] = p[i];
}
for ( j = 31 ; j >31 - m ; k -- ,j --) {
ch_l[k] = p[j];
}
return ch_l;
};
int To_arry_num(int k){
int i = 0 , s=1;
for ( ; i < k ; i ++) {
s *= 2 ;
}
return s;
}
int To_sum( int *p , int h){
int sum = 0 , i = 0;
for ( i = 0; i < h; i ++ )
{
if ( p[i] == 1)
{
sum += To_arry_num( 31-i);
}
}
return sum;
}
int main(int argc, const char * argv[])
{
long a ;
int *p , m = 0;
scanf("%ld",&a);
scanf("%d",&m);
// printf("%ld\n",a);
if ( a == -1) {
printf("-1");
}
else
{
p =del_num(a);//分解数字为2进制
p=Toright(p, m);
printfArry(p,32);
printf("\n");
a = To_sum(p, 32);
printf("%ld\n",a);
}
return 0;
}
//循环左边移动 n位
#include <stdio.h>
int ch[32] = {} , ch_l[32] = {};
void printfArry( int *a , int b);
int * del_num( long a);
int * Toleft( int * p, int m);
int To_arry_num( int k);
int To_sum( int *p ,int h);
void printfArry( int *a , int b){
int i = 0 ;
for ( i = 0 ; i < b; i ++) {
printf("%d",a[i]);
}
}
int * del_num( long a){
int i = 0;
for ( i = 0; a > 0; i ++ )
{
if ( a %2 == 0) {
ch[ 31 - i] = 0;
}
else{
ch[ 31 - i] = 1;
}
a /= 2 ;
}
return ch ;
}
int * Toleft( int * p, int m)
{
int i = 0 , k = 31 - m ;
for ( i = 31 ; k == 0 ; k-- ,i --)
{
ch_l[k] = p[i];
}
for ( k = 31 -m ; i >= 0; k -- ,i --) {
ch_l[k] = p[i];
}
return ch_l;
};
int To_arry_num(int k){
int i = 0 , s=1;
for ( ; i < k ; i ++) {
s *= 2 ;
}
return s;
}
int To_sum( int *p , int h){
int sum = 0 , i = 0;
for ( i = 0; i < h; i ++ )
{
if ( p[i] == 1)
{
sum += To_arry_num( 31-i);
}
}
return sum;
}
int main(int argc, const char * argv[])
{
long a ;
int *p , m = 0;
scanf("%ld",&a);
scanf("%d",&m);
// printf("%ld\n",a);
if ( a == -1) {
printf("-1");
}
else
{
if ( m != 32)
{
p =del_num(a);//分解数字为2进制
p=Toleft(p, m);
// printfArry(p,32);
printf("\n");
a = To_sum(p, 32);
printf("%ld\n",a);
}else
{
printf("%d",a);
}
}
return 0;
}
//实现一个按照ID进行排序的链表,并按有序的方式初始化链表中的结点,然后实现向链表中插入一个新结点,在插入完成后,不会破坏链表的排序。
#include <stdio.h>
//#include<malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct stu)
struct stu {
int id;
char a[1];
struct stu *next;
};
int n;
struct stu* c(void){//创建链表
struct stu *head ;
struct stu *p1,*p2;
n = 0;
p1 =p2 =(struct stu*)malloc(LEN);
scanf("%d%c",&p1->id,&p1->a[0]);
head = NULL ;
do{
n += 1;
if ( n == 1) head = p1;
else p2->next = p1;
p2 = p1;
if(p2->a[0] == '\n' )
break;
p1 = (struct stu *)malloc(LEN);
scanf("%d%c",&p1->id,&p1->a[0]);
p2 -> next = NULL;
}while (1);
return (head);
}
int main(int argc, const char * argv[])
{
struct stu *p ,*p3, *p4,*p5;
p = c();
p5 = p;
p3=(struct stu *)malloc(LEN);
scanf("%d",&p3->id);
p4=p->next;
while (1) {
if ( (p4 ->id) < (p->id) ) {
if ( p3->id >p4->id && p3->id < p->id)
{
p3->next = p4;
p->next = p3;//插入一个指针
break;
}
else
{
p = p4;
p4 = p4->next;//向后边移动一个地址
}
}
if ( p4 ->id > p->id)
{
if (p3->id > p->id && p3->id < p4->id)
{
p3->next = p4;
p->next = p3;//向后边移动一个地址
break;
}
else
{
p = p4;//向后边移动一个地址
p4 = p4->next;
}
}
}
while (p5 != NULL) {
printf("%d",p5->id);
p5 = p5->next;
}
printf("\n");
return 0;
}
c 指针 及其位运算循环移动拔河比赛问题代码的更多相关文章
- nyist oj 138 找球号(二)(hash 表+位运算)
找球号(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描写叙述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中.每一个球上都有一个整数编号i(0<=i< ...
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- 简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
- 求1+2+……+n(位运算)
求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 我发现网上的做法都很神,各种理由编译的巧妙办法,就能间接 ...
- 【转】PHP 位运算应用口诀
位运算应用口诀 清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. 2 "<<" ...
- N皇后问题(位运算实现)
本文参考Matrix67的位运算相关的博文. 顺道列出Matrix67的位运算及其使用技巧 (一) (二) (三) (四),很不错的文章,非常值得一看. 主要就其中的N皇后问题,给出C++位运算实现版 ...
- 剑指offer—算法之位运算(二进制中1的个数)
位运算: 左移:m<<n将m左移n位,左移后低位补充0: 右移:m>>n将m右移n位,右移后高位补充的是符号位,负数补充1,整数补充0.(正数的边界值为(1,ox7FFFFFF ...
- 关于C/C++中的位运算技巧
本篇文章讲述在学习CSAPP位运算LAB时的一些心得. 移位运算的小技巧 C/C++对于移位运算具有不同的策略,对于无符号数,左右移位为逻辑移位,也就是直接移位:对于有符号数,采用算术移位的方式,即左 ...
- PHP位运算 详细说明
在实际应用中可以做用户权限的应用我这里说到的权限管理办法是一个普遍采用的方法,主要是使用到”位运行符”操作,& 位与运算符.| 位或运行符.参与运算的如果是10进制数,则会被转换至2进制数参与 ...
随机推荐
- F - The Fun Number System(第二季水)
Description In a k bit 2's complement number, where the bits are indexed from 0 to k-1, the weight o ...
- Bluestacks视窗界面调整及内存调整经验
本文将分享bluestacks视窗界面调整及内存调整的经验,可以有效解决Bluestacks缓慢.卡的问题! 一.bluestacks视窗界面调整 1.进入注册表: 2.找到下图中的键值: 3.修改键 ...
- pcl1.7.2_vs2013_x64工程配置
pcl1.7.2_vs2013_x64工程配置 C:\Program Files\PCL 1.7.2\include\pcl-1.7;C:\Program Files\PCL 1.7.2\3rdPar ...
- wampserver php 设置时间
php.ini 查找date.timezone = Europe/Paris 修改成亚洲地区 date.timezone = Asia/Shanghai
- Qt4.7文档翻译:Qt样式单参考,Qt Style Sheets Reference(超长,超全)
内容目录 Qt样式单参考 可进行样式设置的部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt样式单参考 Qt样式单支持各种属性.伪状态和子控件,这样使得妳能够自行设计部件的外观. ...
- linux 启动 oracle数据库
第一步:切换到oracle用户 su - oracle 第二步:启动oracle数据库监听 lsnrctl start 第三步:输入下方命令,出现:sql> sqlplus /nolog 第四步 ...
- win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题。取消安装。”处理方法
win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题.取消安装.”处理方法 vs2008试用期到期,卸载.重新安装都会出现“ 加载安装组件时遇到问题.取消安装.”无 ...
- Java琐碎知识点
jps命令是JDK1.5提供的一条显示当前用户的所有java进程pid的指令,类似Linux上的ps命令简化版,Windows和linux/unix平台都可以用比较常用的参数:-q:只显示pid,不显 ...
- jquery.tablesorter.js 学习笔记
jquery.tablesorter.js 一般情况下,表格数据的排序方式有两种,第一种是让后端服务将排序后的数据直接输出,另外一种方式就是使用客户端排序,而jquery.tablesorter.js ...
- poj2488 A Knight's Journey
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24840 Accepted: ...